[swift-users] unowned self in closure in a playground

Ray Fix rayfix at gmail.com
Tue Feb 21 12:00:42 CST 2017


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?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20170221/98120513/attachment.html>


More information about the swift-users mailing list