sta*_*886 11 objective-c nsdate objective-c-category swift swift3
我有一个Obj-C类别NSDate
,我正在尝试使用Swift的Date结构来使用该类别中的函数.
有没有一个干净的方法来做到这一点,而不必每次都投出或不得不创建NSDate
实例Date
或一些丑陋的其他黑客?
或者我不得不将我的对象定义为NSDate而不是Date?
苹果提到这里是
Swift覆盖到Foundation框架提供了Date结构,它结合了NSDate类.Date值类型提供与NSDate引用类型相同的功能,并且这两者可以在与Objective-C API交互的Swift代码中互换使用.此行为类似于Swift如何将标准字符串,数字和集合类型桥接到其对应的Foundation类.
,所以我的问题是如何使用干净的最小代码访问我的NSDate
类别中的额外函数Date
?
作为参考,我使用的是Swift 3.
Swift的3种桥接类型是通过对相应Objective-C对象的内部引用实现的.因此,类似于"基于继承的组合"原则,您可以在Swift中声明您感兴趣的方法,并简单地转发调用.
例如,如果Objective-C中有以下方法:
@interface NSDate(MyAdditions)
- (NSString*)myCustomNicellyFormattedDate;
@end
Run Code Online (Sandbox Code Playgroud)
您可以添加一个扩展名Date
,只需转换和转发:
extension Date {
var myCustomNicellyFormattedDate: String {
return (self as NSDate).myCustomNicellyFormattedDate()
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法的优点是可以在Objective-C和Swift中使用该方法,只需很少的开销和维护麻烦.最重要的是,没有代码重复.