我研究过,当一个类继承自父类,然后是所有属性&父类的功能来到子类。现在我在父类中声明了一个方法,以便它保留给所有子类。现在我想从孩子那里调用父母的方法。我该怎么办?
class BaseController: UIViewController {
func addNavBar() {
//some code
}
}
class SignupController: BaseController {
override func viewDidLoad() {
self.addNavBar()
}
}
答案 0 :(得分:4)
您正在使用超类方法,因此您可以使用super
关键字调用方法,如下所示。
class BaseController: UIViewController {
func addNavBar() {
//some code
}
}
class SignupController: BaseController {
override func viewDidLoad() {
super.addNavBar()
}
}
答案 1 :(得分:3)
class basecontroller:UIViewControler {
func addNavBar() {
//some code
}
}
class SignupController:BaseController {
func viewDidLoad() {
self.addNavBar() //this will call parent method if you are not override
}
override func addNavBar() {
super.addNavBar() //In case of overriding you need to use super
//some code
}
}
答案 2 :(得分:3)
如果你的课程 B 来自 A ......
class BaseController: UIViewController {
func addNavBar() { print("...") }
}
class SignupController: BaseController {
}
在课程 B 中,您可以通过输入
从类 A 调用方法super.addNavBar() **OR** self.addNavBar()
...取决于您是否在使用override
关键字的子类中重新实现了该方法。如果您没有 override
它(并且您不一定非必须),那么这两个电话是相同的。
另一方面,如果您在 B :
中添加了自己的实现override func addNavBar() {
print("My implementation of addNavBar")
}
致电super.addNavBar()
将从 A 调用实施。调用self.addNavBar()
将调用您的本地实现,两者都可以从您的子类中接受。当你的子类也调用super
时:
override func addNavBar() {
super.addNavBar()
print("My implementation of addNavBar")
}
从子类调用self.addNavBar()
将从两者调用实现。请注意,如果您未在override
方法中调用超类实现,则替换此实现。
在大多数UI
- 类中,强烈建议在覆盖时调用超类方法,以避免任何异常行为,除非您自己提供足够的实现(例如重新定位或绘制元素)