所以我用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?
答案 0 :(得分:1)
以下作品 - 对自己的委托没有多大意义,但没关系,它有效:
let x = B()
x.delegate = x
x.a()
或稍微分开:
let x = B()
let a : A = x
a.delegate = x
a.a()