加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

有没有办法将swift方法注释为需要调用其超类的实现

发布时间:2020-12-14 04:54:15 所属栏目:百科 来源:网络整理
导读:参见英文答案 Swift equivalent to __attribute((objc_requires_super))?????????????????????????????????????1个 我有一个超类,它有一个方法的基本实现(prepareForSegue:sender:在我的情况下),我想确保任何覆盖此方法的子类都调用super的实现. class A {
参见英文答案 > Swift equivalent to __attribute((objc_requires_super))?????????????????????????????????????1个
我有一个超类,它有一个方法的基本实现(prepareForSegue:sender:在我的情况下),我想确保任何覆盖此方法的子类都调用super的实现.

class A {
    func foo() {
        // Some basic shared behavior
    }
}

class B : A {
    override func foo() {
        // I want the compiler to yell at me if I forget super.foo() here
    }
}

有没有办法在swift中使用NS_REQUIRES_SUPER,或者可能是使用协议模仿这种行为的方法?

解决方法

可能有一种可能有效的方法:

class A {
    private func foo() { println("A: Foo") }

    final func bar() {
        println("A: Bar")
        foo()
    }
} 

class B : A {
    override private func foo() { println("B: foo") }  
}

var a = A()  
a.bar()       // "A: BarnA: Foo"
println()
var b = B()
b.bar()       // "A: BarnB: Foo"

此代码不允许覆盖bar()方法,但允许覆盖foo()方法.那么诀窍是用户需要调用bar()方法而不是foo()方法,但是如果你发生了这种情况,那么你可以确保超类方法,即println(“A:Bar”)总是叫!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读