I just want to demo how the inout capture works. the demo code just want to capture value avoiding capture self.
> > On Oct 5, 2016, at 10:07 PM, Cao > > Jiannan<frog...@163.com(mailto:frog...@163.com)>wrote: > > so if developer want to capture an variable inference, must declare a new > > variable. > I don’t follow what you mean here. > > > > > classA { > > varvalue = 1 > > > > functest() ->() ->Int{ > > varcapturedValue =self.value > > leteditInfo = { () ->Intin > > capturedValue += 1 > > returncapturedValue > > } > > returneditInfo > > } > > } > > > > leta =A() > > > > leteditInfo =a.test() > > print(editInfo()) // 2 > > print(a.value) // 1 > > > > print(editInfo()) // 3 > > > > print(a.value) // 1 > > > > what about: > > > > classA { > > varvalue = 1 > > > > functest() ->() ->Int{ > > leteditInfo = { [inout value] () ->Intin > > capturedValue += 1 > > returncapturedValue > > } > > returneditInfo > > } > > } > > > > leta =A() > > > > leteditInfo =a.test() > > print(editInfo()) // 2 > > print(a.value) // 2 > > > > > > print(editInfo()) // 3 > > > > print(a.value) // 3 > > > > > > > > > I’m not quite sure what you’re getting at, but this prints what you’re > expecting in the output you have in the comments: > > class A { > var value = 1 > > func test() ->() ->Int { > let editInfo = { () ->Int in > self.value += 1 > return self.value > } > return editInfo > } > } > > let a = A() > > let editInfo = a.test() > print(editInfo()) // 2 > print(a.value) // 2 > print(editInfo()) // 3 > print(a.value) // 3 > > > Mark > > > > > >>On Oct 5, 2016, at 9:06 PM, Cao Jiannan via > > >>swift-evolution<swift-evolution@swift.org(mailto:swift-evolution@swift.org)>wrote: > > >> > > >>for example: > > >> > > >>var a = 1 > > >> > > >>let block = { [inout a] in > > >>a += 1 > > >>} > > >> > > >>block() > > >>block() > > >> > > >>print(a) // 3 > > >This is already how captures work by default in closures and nested > > >functions in Swift: > > > > > >var a = 1 > > > > > >let block = { a += 1 } > > > > > >block() > > >block() > > > > > >print(a) // prints 3 > > > > > > > > >If you want to capture something immutably you can put it in the capture > > >list: > > > > > >var a = 1 > > >let block = { [a] in a += 1 } // error: left side of mutating operator > > >isn't mutable: 'a' is a 'let' constant > > > > > >Mark > > > > > >> > > >> > > >>_______________________________________________ > > >>swift-evolution mailing list > > >>swift-evolution@swift.org(mailto:swift-evolution@swift.org) > > >>https://lists.swift.org/mailman/listinfo/swift-evolution > > > > > > > > > > > > _______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution