Swift 与OC 混编

2021-05-22  本文已影响0人  rhc2008

NS_SWIFT_NAME: 在OC中,重新命名在swift中的名称

NS_SWIFT_UNAVAILABLE ,在Swift中不可见,不能使用

1.对于自定义的类而言,OC的类,不能继承Swift的类,即要混编的OC类不能是Swift类的子类

反过来,需要混编的Swift类可以继承自OC的类

2. swift没有宏定议的,用相应的替换

```Objective-C

#define TOOLLABAR_HEIGHT44

let TOOLLABAR_HEIGHT = 44

```

 常量不变化值

#define SCREEN_WIDTH ([[UISCREEN mainScreen]bounds].size.width)

let SCREEN_WIDTH= UISCreen.mainScreen().bounds.size.width

 常量变化值

#define STATUS_BAR_HEIGHT ([UIApplication sharedApplication].statusBarFrame.size.height);

func STATUS_BAR_HEIGHT() -> CGFloat {

    return UIApplication.sharedApplication().statusBarFrame.size.height

}

带参的宏

#define RGB_COLOR(r,g,b) [UIColor colorWithRed:r/255.f green:g/255.f blue:b/255alpha:1.0]

func RGB_COLOR(r:CGFloat,g:CGFloat,b:CGFloat) -> UIColor {

    return  UIColor(red:r,green:g,blue:b,alpha:1.0)

}

3.swift的独有特性,如果要提供给OC中调用,不要使用OC中没有的特性

swift中有许多OC没有的特性,比如,元组为一等公民函数,还有特有的枚举类型,所以要使用的混编文件要注意Swift独有属性问题

 4.OC API和SWIFT的风格相差比较大,SWIFT调用OC的API 时可能由于数据类型等不一致无法达到预期

(OC方法采用C语言风格的多参类型,OR OC

方法返回NSNotFound,在Swift中期望返回nil),这时候就要 NS_REFINED_FOR_SWIFT了

@interface MyClass:NSObject

-(NSUInteger)indexOfString:(NSString*)aString NS_REFINED_FOR_SWIFT:

@end

@implementation MyClass

-(NSUInteger)indexOfString:(NSString*)aString  {

    return  NSNotFound;

}

@end

extension MyClass {

    funcindexOfString(aString:String!) ->Int? {

        letindex = Int(__index(of:aString))

        if(index == NSNotFound) {

            returnnil

        }

        returnindex

    }

}

上一篇 下一篇

猜你喜欢

热点阅读