У меня есть расширение:
public extension UIWindow {
override public func topMostController()->UIViewController? { ... }
}
но для моего topMostController
Я получаю следующую ошибку:
Declarations in extensions cannot override yet error
Это работает хорошо на Swift 3.1, но на Swift 4 я получаю эту ошибку. Как это может быть зафиксировано? Что они изменяли в Swift 4?
На самом деле в Коде операции существует немного проблем:
UIView
(который является суперклассом UIWindow
) не имеет метода topMostController()
, это, почему Вы не можете переопределить его.
Apple не поощряет override func
внутренний extension
:
Расширения могут добавить новую функциональность к типу, но они не могут переопределить существующую функциональность.
Упаковывают Вас, все еще хотят переопределить функцию в расширении, существует 2 пути:
Mark Вашу функцию с @objc dynamic func
в родительском классе:
class Vehicle {
@objc dynamic func run() { /* do something */ }
}
class Car: Vehicle { }
extension Car {
override func run() { /* do another thing */ }
}
Переопределение [B] функционирует от сборки - в классах, который является потомком NSObject
.
extension UIWindow {
// UIWindow is a descendant of NSObject, and its superclass UIView has this function then you can override
override open func becomeFirstResponder() -> Bool {
...
return super.becomeFirstResponder()
}
}