我在 Date 的扩展上创建了一个静态方法。我试图在 Objective-C 文件中调用这个方法。我收到错误“选择器方法名称没有已知的类”。
更多细节:
在 SWIFT 3.0 中
extension Date {
static func getDefaultFormattedDateStringFromDate(_ validToDate:Date) -> String? {
}
}
在 Objective-C 中
NSString *dateString = [NSDate getDefaultFormattedDateTimeStringFromDate:[NSDate date]];
最佳答案
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
)会自动桥接到 Foundation 类型(NSDate
、NSString
)。
所有这些都与静态(类型)与实例方法无关,并且在 你的情况定义一个实例可能会更“自然” 方法:
extension NSDate {
func defaultFormattedString() -> String? {
// ...
}
}
导入 Objective-C 为
@interface NSDate
- (NSString * _Nullable)defaultFormattedString;
@end
并称为
NSString *dateString = [[NSDate date] defaultFormattedString];
关于objective-c - 如何在扩展中定义的 Objective-C 中使用静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40212780/