so if developer want to capture an variable inference, must declare a new 
variable.

class A {
    var value = 1
    
    func test() -> () -> Int {
        var capturedValue = self.value
        let editInfo = { () -> Int in 
            capturedValue += 1
            return capturedValue
        }
        return editInfo
    }
}

let a = A()

let editInfo = a.test()
print(editInfo()) // 2
print(a.value) // 1
print(editInfo()) // 3
print(a.value) // 1

what about:

class A {
    var value = 1
    
    func test() -> () -> Int {
        let editInfo = { [inout value] () -> Int in 
            capturedValue += 1
            return capturedValue
        }
        return editInfo
    }
}

let a = A()

let editInfo = a.test()
print(editInfo()) // 2
print(a.value) // 2
print(editInfo()) // 3
print(a.value) // 3

> > On Oct 5, 2016, at 9:06 PM, Cao Jiannan via 
> > swift-evolution<[email protected]>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
> > [email protected]
> > https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> 
> 
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to