如何在扩展中定义的objective-c中使用静态方法

时间:2016-10-24 07:23:29

标签: objective-c swift swift3 swift-extensions

我有一个在Date扩展时创建的静态方法。我试图在Objective-C文件中调用此方法。我收到错误为“选择器方法名称没有已知的类”。

更多细节:

在SWIFT 3.0中

extension Date {
     static func  getDefaultFormattedDateStringFromDate(_ validToDate:Date) -> String? {

    }
}

在Objective-C

NSString *dateString = [NSDate getDefaultFormattedDateTimeStringFromDate:[NSDate date]];

1 个答案:

答案 0 :(得分:2)

struct Date是" 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

请注意,参数和返回类型(DateString)会自动桥接到基础类型(NSDateNSString)。

所有这些与静态(类型)和实例方法无关,并且在 你的情况可能更多"自然"定义一个实例 方法:

extension NSDate {
    func defaultFormattedString() -> String? {
        // ...
    }
}

的形式导入Objective-C
@interface NSDate
- (NSString * _Nullable)defaultFormattedString;
@end

并称为

NSString *dateString = [[NSDate date] defaultFormattedString];