gpt4 book ai didi

ios - Swift 中单例类的委托(delegate)

转载 作者:搜寻专家 更新时间:2023-10-31 08:13:40 25 4
gpt4 key购买 nike

如何使用单例/共享类的委托(delegate)方法?有一个单例类定义了一些协议(protocol),但我不知道如何访问其他类中的委托(delegate)函数。

引用代码片段(swift):

protocol AClassDelegate
{
func method1()
}

class A
{
static let shared = A()

override init() {
//initialisation of member variables
}

var delegate: AClassDelegate
func foo() {

}
}


class B: AClassDelegate
{
func bar() {
// Note: not getting call to 'foo' method of class 'A'
A.shared.delegate = self
A.shared.foo()
}
}

这个实现是否正确?

最佳答案

首先,我想指出:

1- 创建一个单例类应该包含:

private init() {}

这导致只能通过使用其共享实例来强制访问该类。

2-Max's Answer中所述,委托(delegate)应该是可选的并且有一个引用。

3-协议(protocol)应该是class的类型,如下:

protocol AClassDelegate: class

有关更多信息,您可能需要查看此 Q&A .


现在,我们假设 - 出于测试目的 - 来自 AClassDelegatemethod1() 应该在调用 foo() 时被调用A 类:

protocol AClassDelegate: class {
func method1()
}

class A {
private init() {}
static let shared = A()

weak var delegate: AClassDelegate?

func foo() {
print(#function)

delegate?.method1()
}
}

让我们实现符合 AClassDelegate 的类:

class B: AClassDelegate {
func bar() {
A.shared.delegate = self
A.shared.foo()
}

func method1() {
print("calling the delegate method B Class")
}
}

class C: AClassDelegate {
func bar() {
A.shared.delegate = self
A.shared.foo()
}

func method1() {
print("calling the delegate method C Class")
}
}

输出应该是:

let b = B()
b.bar()
// this will print:
/*
foo()
calling the delegate method B Class
*/

let c = C()
c.bar()
// this will print:
/*
foo()
calling the delegate method C Class
*/

关于ios - Swift 中单例类的委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42976726/

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