[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.
Zhaoxin
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