在下面的代码中,我有一个拥有SubService对象数组的Service类。子服务在初始化中采用serviceDelegate参数,以便能够将结果发送回服务,然后服务可以确定只有在所有子服务都准备就绪时才准备好。
我使用了懒惰属性,因为它的初始化使用self和swift并不允许在 self 完全初始化之前使用self。 懒惰属性应该仅在第一次访问时初始化,然后被视为正常存储的变量。
我遇到的问题是,在初始化之后,当服务收到onSubServiceReady()回调并访问子服务时......再次进行初始化,实例化一个新的SubService对象。 所以也许我在懒惰的工作方面缺少一些东西。
class SubService{
init(serviceDelegate: ServiceDelegate){
...
// SIGNAL THAT SUBSERVICE IS READY TO THE SERVICE
t4fServiceDelegate?.onSubServiceReady(true)
}
}
protocol SubServiceDelegate{
func onSubServiceReady(_ isSubServiceReady: Bool)
}
class Service: SubServiceDelegate{
lazy let subservices: [SubService] = [SubService(serviceDelegate: self as ServiceDelegate ) ]
init(){
...
_ = self.t4fSubServices // need to initialize the lazy property so that each subservice starts its function
}
// From SubServiceDelegate
public func onSubServiceReady(_ isSubServiceReady: Bool) {
var allSubServicesConnected = false
for subservice in subServices {
if subservice.isConnectionReady { allSubServicesConnected = true }
}
isServiceReady = allSubServicesConnected
}
}