>
> lifetime guaranteed to be around until the method call completes

AFAIK, this is true.
However, in this case, it's not a method call. The lifetime is only
guaranteed until getter:increment completes.

Demo().increment(3)
|--------------| lifetime



2017-02-22 3:00 GMT+09:00 Ray Fix via swift-users <swift-users@swift.org>:

> Hi,
>
> The following code crashes:
>
> class Demo {
>   var value = 0
>   lazy var increment: (Int) -> Void = { [unowned self] by in
>     self.value += by
>     print(self.value)
>   }
>  }
>
> Demo().increment(3)
> error: Playground execution aborted: error: Execution was interrupted,
> reason: EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0).
>
> However if I call it this way:
>
> do {
>   let demo = Demo()
>   demo.increment(3)
> }
>
> All is well.  This breaks my mental model of lifetime guaranteed to be
> around until the method call completes.
> Is it me that is wrong or the playground.  Is the second way working just
> by luck?
>
> _______________________________________________
> swift-users mailing list
> swift-users@swift.org
> https://lists.swift.org/mailman/listinfo/swift-users
>
>
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to