从孩子那里调用父方法?

时间:2017-10-27 07:29:50

标签: ios swift xcode oop inheritance

我研究过,当一个类继承自父类,然后是所有属性&父类的功能来到子类。现在我在父类中声明了一个方法,以便它保留给所有子类。现在我想从孩子那里调用父母的方法。我该怎么办?

class BaseController: UIViewController {

    func addNavBar() {

        //some code
    }

}


class SignupController: BaseController {

    override func viewDidLoad() {
        self.addNavBar()
    }
}

3 个答案:

答案 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 - 类中,强烈建议在覆盖时调用超类方法,以避免任何异常行为,除非您自己提供足够的实现(例如重新定位或绘制元素)