我正在测试从初始化器运行委托模式.这是我的数据供应商测试类及其"数据源":
protocol MyClassDataSource : AnyObject{
func returnString(string: String)
}
protocol MyClassProtocol: AnyObject {
var dataSource : MyClassDataSource? { get set }
}
class MyClass : MyClassProtocol {
weak var dataSource: MyClassDataSource?
init() {
print("1. 我的班级已初始化")
getString()
}
func getString() {
let myString = "Hello World"
print("3. The getString func run")
dataSource?.returnString(string: myString)
}
}
我将数据发送到我的另一个班级.这是:
class OtherClass : MyClassDataSource {
weak var myClass : MyClassProtocol?
init(myClass: MyClassProtocol?) {
self.myClass = myClass
self.myClass?.dataSource = self
print("2. MyClass委托集")
}
func returnString(string: String) {
print("4. Delegate run and print the string: \(string)")
}
}
然后我初始化它们:
let myClass = MyClass()
let otherClass = OtherClass(myClass: myClass)
我想创建我的类并将数据从MyClass发送到DeliverClass.我想使用int()函数将dataSource设置为self,并运行一个函数并发送数据.当然,它没有起作用.我希望在控制台中看到的内容:
- 我的班级已初始化
- MyClass委托集
- get字符串()func运行
- 数据源在Inbox Class中运行并打印字符串:Hello World
但在设置或创建Inbox Class之前,getString()立即运行并打印以下内容:
- 我的班级已初始化
- get字符串()func运行
- MyClass委托集
如果我手动延迟get字符串()运行,它就会起作用:
func getString() {
let myString = "Hello World"
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { [weak self] in
print("3. The getString func run")
self?.dataSource?.returnString(string: myString)
}
}
所以,我的问题是,我如何才能让它发挥作用?我可以仅通过初始化类来设置委托并在之间发送数据吗?有可能以某种方式做到吗?