gpt4 book ai didi

ios - swift 地,父类(super class)的函数如何通过协议(protocol)/委托(delegate)使用子类的函数?

转载 作者:行者123 更新时间:2023-11-29 01:21:55 25 4
gpt4 key购买 nike

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

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

但是,我不知道如何给委托(delegate)赋值。请注意,创建的唯一实例是 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?

最佳答案

以下工作 - 本身作为委托(delegate)没有多大意义,但没关系,它工作:

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

或者稍微分开一点:

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

关于ios - swift 地,父类(super class)的函数如何通过协议(protocol)/委托(delegate)使用子类的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34496280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com