是否可以确保在重写的子类方法的末尾调用某个特定的超类的方法?

请考虑一下(并接受我和我的愚蠢问题):

class SubView1 : UIView {
    override func layoutSubviews() {
        super.layoutSubviews() // Layout parent(UIView) subviews

        // layout my own(SubView1) subviews

        self.notify()
    }

    func notify() {
        // post notification that view finished layout of subviews
    }
}


class SubView2 : SubView1 {
    override func layoutSubviews() {
        super.layoutSubviews() // Layout parent(SubView1) subviews

        // layout my own(SubView2) subviews

        // I want that `notify()` is called at this point
        // and not in the end of super.layoutSubviews()
    }
}


在我看来,简单继承是不可能的,但是也许有一些技巧可以实现它。

最佳答案

您唯一的选择是执行以下操作:

class SubView2 : SubView1 {
    override func layoutSubviews() {
        // layout my own(SubView2) subviews

        super.layoutSubviews() // Layout parent(SubView1) subviews
    }
}


由于您在末尾调用super.layoutSubviews(),因此对notify的调用将在末尾而不是在布局SubView2之前发生。

关于swift - swift 。确保在子类方法的末尾调用父类(super class)方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48213804/

10-13 03:00