【问题标题】:how to use a static method in objective-c defined in extension如何在扩展中定义的objective-c中使用静态方法
【发布时间】:2016-10-24 07:23:28
【问题描述】:
我在 Date 的扩展上创建了一个静态方法。我正在尝试在 Objective-C 文件中调用此方法。我收到错误为“选择器方法名称的未知类”。
更多细节:
在 SWIFT 3.0 中
extension Date {
static func getDefaultFormattedDateStringFromDate(_ validToDate:Date) -> String? {
}
}
在 Objective-C 中
NSString *dateString = [NSDate getDefaultFormattedDateTimeStringFromDate:[NSDate date]];
【问题讨论】:
标签:
objective-c
swift
swift3
swift-extensions
【解决方案1】:
struct Date 是 Foundation 类型的“Swift 覆盖类型”
NSDate(比较 Swift 3: Date vs NSDate?)和 Objective-C 未知。
您必须为NSDate 定义一个扩展名,以便
可以在 Objective-C 中使用:
extension NSDate {
static func getDefaultFormattedDateStringFromDate(_ validToDate: Date) -> String? {
// ...
}
}
这是导入到Objective-C的
@interface NSDate
+ (NSString * _Nullable)getDefaultFormattedDateStringFromDate:(NSDate * _Nonnull)validToDate;
@end
请注意,参数和返回类型(Date、String)会自动桥接到基础类型(NSDate、NSString)。
所有这些都与静态(类型)与实例方法无关,并且在
你的情况,定义一个实例可能更“自然”
方法:
extension NSDate {
func defaultFormattedString() -> String? {
// ...
}
}
它被导入到Objective-C中
@interface NSDate
- (NSString * _Nullable)defaultFormattedString;
@end
并称为
NSString *dateString = [[NSDate date] defaultFormattedString];