Быстрое ключевое слово open и переопределенный метод / свойства в расширении?
С введением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()
)Вопрос: Есть ли обходной путь, чтобы иметь возможность переопределить расширение при условии, методы / свойствачерез модули / рамки?