Swift 5.0
En fait il y a quelques problèmes dans l'OP code:
UIView
(ce qui est super-classe de UIWindow
) ne possède pas de méthode topMostController()
, c'est pourquoi vous ne pouvez pas le remplacer.
-
Apple ne veut pas encourager override func
à l'intérieur d' extension
:
Les Extensions permettent d'ajouter de nouvelles fonctionnalités à un type, mais ils ne peuvent pas
remplacer les fonctionnalités existantes.
En cas vous voulez remplacer la fonction de l'extension, il y a 2 façons:
[A] la Marque de votre fonction avec @objc dynamic func
dans la classe parent:
class Vehicle {
@objc dynamic func run() { /* do something */ }
}
class Car: Vehicle { }
extension Car {
override func run() { /* do another thing */ }
}
[B] Remplacer la fonction de construire des classes, qui est le descendant de l' 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()
}
}