每次访问时都会初始化惰性属性

时间:2017-06-09 14:26:39

标签: ios swift

在下面的代码中,我有一个拥有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
  }

}

0 个答案:

没有答案