在swift中,超类的函数如何通过协议/委托使用子类的功能?

时间:2015-12-28 15:32:02

标签: ios swift inheritance delegates

所以我用Swift编写了一个iOS应用程序,遇到了以下问题: 我有两个A和B类,而B是A的子类。 设A具有函数a(),而B具有函数b()。现在,A不会实现b()而B不会覆盖a(),但a()将调用b()。为了做到这一点,我正在尝试使用协议ADelegate,它是一个包含b()的委托。 B继承A并遵守ADelegate。因此,B必须实现b()。 现在,假设我创建了B的实例,我们称之为bb。我调用bb.a(),它将调用b()。调用a的a(),因为a()仅在超类A中实现。 由于这个用例,在我的A类实现中,我必须调用b()(我认为根据我的用例没有办法),而b()只能由A的子类B实现。 我的问题是,如何在A中正确调用b()?我认为这可以在Objective C中完成,但我不确定如何在Swift中完成。 我现在正在做的是这样的事情:

var delegate: ADelegate?  // this code is in A
...
self.delegate?.b()

但是,我不知道如何为委托赋值。请注意,唯一创建的实例是bb(),它是B的实例。

protocol ADelegate {
    func b()
}

class A: NSObject {
    var delegate: ADelegate?

    func a() {
        self.delegate?.b()
    }
}

class B: A, ADelegate {

    func b() {

    }
}

用例:

x = B()
x.a()

这就是我现在所拥有的,我只是想知道如何在A中分配给self.delegate?

1 个答案:

答案 0 :(得分:1)

以下作品 - 对自己的委托没有多大意义,但没关系,它有效:

let x = B()
x.delegate = x
x.a()

或稍微分开:

let x = B()
let a : A = x
a.delegate = x
a.a()