NS_REFINED_FOR_SWIFT
来源:互联网 发布:区县网络社会组织调研 编辑:程序博客网 时间:2024/06/05 16:59
重定义Objective-C接口
如果您的项目中使用了 Objective-C 以及 Swift 两种语言混编,您可能会遇到这样一个尴尬的局面:Objective-C 的 API 和 Swift 的风格相差比较大,Swift调用Objective-C的API时可能由于数据类型等不一致导致无法达到预期(比如,Objective-C里的方法采用了C语言风格的多参数类型;或者Objective-C方法返回NSNotFound,在Swift中期望返回nil)。这时候就要 NS_REFINED_FOR_SWIFT了。
NS_REFINED_FOR_SWIFT宏指令是Xcode 7.0 新出的参考Xcode 7.0 release note,用它所标记的方法和变量在Objective-C中可以正常使用,但bridge到Swift语言时,编译器会在名称前加上__,注意是双下划线。
直接上代码更易懂:
如下,我们定义了Objective-C风格的API:
@interface MyClass : NSObject // 注:NSNotFound在Objective-C中定义为NSIntegerMax,我们在期望此方法在Swift中调用能返回nil - (NSUInteger)indexOfString:(NSString *)aString NS_REFINED_FOR_SWIFT; - @end
当桥接到 Swift 的时候,这个方法变为:
public class MyClass: NSObject{ public func __indexOfString(aString: String!) -> UInt}
通过 Objective-C 方法,您就可以使用相同的名称来提供一个对 Swift 更友好的 API,我们期望该方法返回可空类型来符合Swift的编码规范,如下所示。
extension MyClass{ // return: 返回aStirng的索引,如果未找到的话返回nil func indexOfString(aStirng: String!) -> Int? { let index = Int(__indexOfString(aStirng)) if (idx == NSNotFound) { return nil } return index}
阅读全文
0 0
- NS_REFINED_FOR_SWIFT
- Windows安装 Zabbix agent
- jmeter运行报错:org.apache.http.NoHttpResponseException: The target server failed to respond
- 类方法(静态方法)与实例方法(对象方法)
- 01_note_Hadoop集群2.8.1的安装配置, JDK安装, 免密码登录 (CentOS7)
- 你不必知道UX设计的一切
- NS_REFINED_FOR_SWIFT
- Solidity的Function Modifiers(P.S. 0.4.17版本)
- opencv基础知识-AbsDiff
- Spark性能优化:资源调优篇
- Oracle导出dmp文件,Oracle11g导出dmp有空表
- 学习笔记:ES6之正则扩展
- Rightmost Digit
- java学习笔记-Arraylist(1)
- Cesium应用篇:3控件(2)BaseLayerPicker