随着Swift 3.0中引入open
关键字(Swift中的'open'关键字是什么?),扩展NSObject
派生类或@objc
属性/方法的限制。
在模块/框架之间声明和使用扩展中的public
(class
) 方法/属性的代码已经失效,因为public
不再意味着在定义模块之外可以被重写。
例如:
public extension UIManagedDocument {
public class func primaryDocumentName() -> String {
return "Document"
}
public class func primaryStoreURL() -> URL {
let documentsURL = FileManager.default.userDocumentsURL
return URL(fileURLWithPath: self.primaryDocumentName(), isDirectory: false, relativeTo: documentsURL)
}
public class func primaryModelName() -> String? {
return "Model"
}
}
- 原始提案(SE-0117)侧重于子类化,没有提到扩展。
- 目前,扩展不支持
open
关键字(您无法编写open extension NSObject
以及open func Method()
)。
问题: 有没有解决办法可以跨模块/框架覆盖扩展提供的方法/属性?
@objc
属性的方法/属性。 (Swift中是否可以在扩展之间进行重写?) - Nocross