[swift-users] lazy initialisation

Zhao Xin owenzx at gmail.com
Fri Jul 8 23:34:34 CDT 2016

The compiler is not smart enough to treat this as you think, nor it will be
designed to. According to the documents, it is the developer‘s burden ​to
add @noescape or weak or unowned. So I disagree it is a bug.


On Sat, Jul 9, 2016 at 7:30 AM, Karl <razielim at gmail.com> wrote:

> 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/b68e004a/attachment.html>

More information about the swift-users mailing list