[swift-users] lazy initialisation

Karl razielim at gmail.com
Fri Jul 8 18:30:22 CDT 2016


> On 5 Jul 2016, at 03:47, Zhao Xin <owenzx at gmail.com> wrote:
> 
> No, it is not a bug.
> 
> For a closure, you have to call self explicitly unless the closure is mark as @noescape. Also, in this situation, self is not unowned, as the closure is not stored, it ran and released. Below, is a situation that you need use unowned self. Here the closure is stored in variable d instead of running and releasing.
> 
>     lazy var d:()->Int = { [unowned self] in
>         return self.a*self.b
>     }
> 
> Zhaoxin

In this specific case, when you are initialising from a closure, there is no need to make the capture of ‘self’ explicit and it’s totally safe for it to be unowned. You can’t invoke the closure without going through a valid instance, and that instance always owns the closure and never the other way around.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20160709/3f48f805/attachment.html>


More information about the swift-users mailing list