С введением ключевого слова open
в Swift 3.0 (Что такое ключевое слово "open" в Swift ?).
Примечание. Ограничено расширениями 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 или нет?) - person Nocross   schedule 25.08.2016