2017-02-22 12:53 GMT+09:00 Ray Fix <ray...@gmail.com>: > > On Feb 21, 2017, at 7:32 PM, rintaro ishizaki <fs.out...@gmail.com> 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 swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users