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
}
}
网友评论