斯威夫特 5
实际上OP代码中存在一些问题:
UIView
(这是 的超类UIWindow
)没有方法topMostController()
,这就是为什么你不能覆盖它。
苹果不鼓励 override func
内部extension
:
扩展可以为类型添加新功能,但不能覆盖现有功能。
如果您仍然想覆盖扩展中的功能,有两种方法:
[A]@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()
}
}