2017-02-22 12:53 GMT+09:00 Ray Fix <[email protected]>:
>
> On Feb 21, 2017, at 7:32 PM, rintaro ishizaki <[email protected]> wrote:
>
> 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
>
>
> Thanks! This is an interesting explanation.
>
> It is curious that naming the variable cases different behavior.
> IOW, this doesn’t have a problem:
>
> let demo = Demo()
> demo.increment(3)
>
> Lifetime seems to last the entire expression.
>
>
I'm not sure, but I think the compiler is just lazy enough to release the "
demo" value *after* the entire expression or scope finishes.
Again, I'm not sure. :)
Anyway, If I were you, I would define a wrapper method:
class Demo {
var value = 0
lazy var _increment: (Int) -> Void { [unowned self] by in ... }
func increment(by: Int) {
_increment(by)
}
}
Demo().increment(by: 3)
> Ray
>
_______________________________________________
swift-users mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-users