小编Noc*_*oss的帖子

扩展中的Swift'open'关键字和可覆盖的方法/属性?

open在Swift 3.0中引入了关键字(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"
    }

}
Run Code Online (Sandbox Code Playgroud)
  • 原始提案(SE-0117)侧重于子类化,并未提及扩展.
  • 目前扩展不支持open关键字(你不能写得open extension NSObject那么好open func Method())

问题:是否有解决方案能够模块/框架覆盖扩展提供的方法/属性?

syntax ios swift swift-extensions

10
推荐指数
2
解决办法
8701
查看次数

标签 统计

ios ×1

swift ×1

swift-extensions ×1

syntax ×1