我在Swift
中具有以下层次继承关系,
class Base {
func method1() { }
func method2() { }
}
class Child: Base {
override func method1() { }
func method3() { }
}
class GrandChild: Child {
}
现在,我想强制
GrandChild
重写method1()
类中的Base
和method3()
类中的Child
。 我该怎么做?任何解决方法或更好的方法? 最佳答案
在Swift中,编译时无法做到这一点。强制方法重写的功能在Swift中不存在。
但是有一个解决方法。
您可以通过添加致命错误fatalError("Must Override")
来实现。
考虑以下示例。
class Base {
func method1() {
fatalError("Must Override")
}
func method2() { }
}
class Child: Base {
override func method1() { }
func method3() {
fatalError("Must Override")
}
}
class GrandChild: Child {
func method1() { }
func method3() { }
}
但是上述方法不会产生任何编译时错误。为此,还有另一个解决方法。
您可以创建一个协议。
protocol ViewControllerProtocol {
func method1()
func method3()
}
typealias ViewController = UIViewController & ViewControllerProtocol
因此,如果您实现此协议而不执行方法,则编译器将生成错误。
作为Swift中协议的功能,您还可以在协议扩展中提供方法的默认实现。
希望这可以帮助。
关于ios - 如何在Swift中为大子类强制重写?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60144511/