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

标签 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]];

最佳答案

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)会自动桥接到 Foundation 类型(NSDateNSString )。


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

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/

相关文章:

ios - UiTextfield 中的底部边框

iphone - 当应用程序在后台或设备被锁定时运行代码

swift - MapKit:检查用户是否在某个地址。 (在建筑物中)

swift - 如何在不触发 "Instance will be immediately deallocated because property ' 的情况下实例化弱委托(delegate) tableViewDelegate' is 'weak' "

objective-c - Cocos2d : Emitted particles do not pan correctly with screen

python - 从 Objective-C 调用 Python

swift - 比较 NSIndexPath Swift

ios - 如何在不同的 View Controller 中拥有相同的视频实例?

ios - 应用程序使用 swift 使用 API 时会崩溃吗?

swift - 如何快速显示用户的高度?