这是尝试改善这个问题。我有一个解决方案,我将在短期内作为答案发布。它基于我在下面收到的评论。希望这种改进,以及评论和随后的回答,可以帮助其他可能陷入我所做的陷阱的人。
我有一些对象需要在我考虑之前下载一些图像"准备好"。
我尝试通过传入一个"完成处理程序"来处理这个问题。进入init函数,我将其传递给实际下载图像的函数的完成处理程序。预期的最终结果是在对象初始化和加载了它的图像之后,然后调用我在初始化期间传入的闭包,在这种情况下是对象是&的通知#34;准备"
为了实现这一点,我尝试捕获作为完成处理程序传入的闭包中新创建的对象。 (以下面的尾部封闭格式显示)
for marker in markerList {
var ourLatitudeMapMarker = OurLatitudeMapMarker(size: size) {
NSNotificationCenter.defaultCenter().postNotificationName("OurLatitudeMapMarkerReady", object: self, userInfo: ["ourLatitudeMapMarker":ourLatitudeMapMarker])
}
}
这导致错误"变量在其自己的初始值中使用"。
我原来的,措辞不好的问题基本上是:
如何将新创建的对象放入传递给init函数的完成处理程序中,以便在最终对象完成后,它可以在完成处理程序中使用" ready"
事后我认为我的问题应该是:
当我的对象准备就绪时,如何调用闭包?"? "准备"被初始化并加载他们的图像。
答案 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])
}