迅速。确保在子类方法的末尾调用超类方法

时间:2018-01-11 18:36:53

标签: swift inheritance

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

请考虑这一点(并忍受我和我的愚蠢问题):

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()
    }
}

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

1 个答案:

答案 0 :(得分:0)

您唯一的选择是:

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

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

由于您在结束时调用了super.layoutSubviews(),因此对notify的调用将在结束时发生,而不是在布置SubView2之前。