【问题标题】: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
    

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


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

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

    它被导入到Objective-C中

    @interface NSDate
    - (NSString * _Nullable)defaultFormattedString;
    @end
    

    并称为

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-31
      • 1970-01-01
      • 2012-07-05
      相关资源
      最近更新 更多