如何避免在其自身初始值内使用的变量"错误?

时间:2015-08-23 21:30:16

标签: swift

更新

这是尝试改善这个问题。我有一个解决方案,我将在短期内作为答案发布。它基于我在下面收到的评论。希望这种改进,以及评论和随后的回答,可以帮助其他可能陷入我所做的陷阱的人。

我有一些对象需要在我考虑之前下载一些图像"准备好"。

我尝试通过传入一个"完成处理程序"来处理这个问题。进入init函数,我将其传递给实际下载图像的函数的完成处理程序。预期的最终结果是在对象初始化加载了它的图像之后,然后调用我在初始化期间传入的闭包,在这种情况下是对象是&的通知#34;准备"

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

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

这导致错误"变量在其自己的初始值中使用"。

我原来的,措辞不好的问题基本上是:

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

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

当我的对象准备就绪时,如何调用闭包?"? "准备"被初始化并加载他们的图像。

1 个答案:

答案 0 :(得分:1)

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

解决方案很明显,一旦我意识到初始化和准备就绪并不是一回事。所以我只有init,初始化对象和另一个方法loadImages,获取完成处理程序,它传递给实际下载图像的方法,并在对象准备好时调用完成处理程序。

所以现在不是一个试图做所有事情的陈述(初始化和加载图像),我有两个。

let ourLatitudeMapMarker = OurLatitudeMapMarker(size: size)

然后再做类似的事情

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