如何避免此"variable used within its own initial value"错误?



更新:

这是为了改进这个问题。我有一个解决方案,我将很快发布作为答案。这是基于我在下面收到的评论。希望这一改进,再加上评论和随后的回答,可以帮助其他可能落入我同样陷阱的人。


我有一组对象,在我认为它们"准备好"之前,需要下载一些图像。

我试图通过向init函数传递一个"完成处理程序"来处理这个问题,然后我将它传递给实际下载图像的函数的完成处理程序。预期的最终结果是,在对象初始化加载其图像后,将调用我在初始化过程中传递的闭包,在这种情况下,将通知对象已"就绪">

为了实现这一点,我尝试在作为完成处理程序传入的闭包中捕获新创建的对象。(以尾部闭合格式显示如下(

for marker in markerList {
  var ourLatitudeMapMarker = OurLatitudeMapMarker(size: size) {
        NSNotificationCenter.defaultCenter().postNotificationName("OurLatitudeMapMarkerReady", object: self, userInfo: ["ourLatitudeMapMarker":ourLatitudeMapMarker])
   }
}

这会导致错误"变量在其初始值内使用"。

我最初的问题措辞拙劣,本质上是:

如何将新创建的对象放入传递给init函数的完成处理程序中,以便在对象最终"就绪"时在完成处理程序中将其使用

事后看来,我认为我的问题应该是:

当我的对象"就绪"时,我如何调用闭包?"就绪"正在初始化并加载其图像。

正如jtbandes在他的评论中指出的,解决这个问题的一个方法是简单地将self作为参数传递给完成处理程序,但最终我同意nhgrif和zaph的评论。

当我意识到初始化和准备不是一回事时,解决方案是显而易见的。因此,我只需要init,初始化对象和另一个方法loadImages,获取完成处理程序,该处理程序传递给实际下载图像的方法,并在对象准备好时调用完成处理程序。

因此,现在我有两个语句,而不是一个试图做所有事情的语句(初始化和加载图像(。

let ourLatitudeMapMarker = OurLatitudeMapMarker(size: size)

然后做一些类似的事情

ourLatitudeMapMarker.loadImages() {
      NSNotificationCenter.defaultCenter().postNotificationName("OurLatitudeMapMarkerReady", object: self, userInfo: ["ourLatitudeMapMarker":ourLatitudeMapMarker])
}

相关内容

最新更新