請(qǐng)問(wèn)是在swift 3.0 嗜愈, Xcode 8.0 下宝冕,函數(shù)內(nèi)的嵌套函數(shù)或者閉包都無(wú)法直接捕捉到輸入輸出參數(shù)张遭,是這樣嗎?如果是地梨,這個(gè)問(wèn)題可以解決嗎菊卷?
個(gè)人測(cè)試:
swift 3.0 , Xcode 8.0 下宝剖,函數(shù)內(nèi)的嵌套函數(shù)或者閉包都無(wú)法直接捕捉到輸入輸出參數(shù)洁闰,會(huì)報(bào)錯(cuò)。
當(dāng)在函數(shù)內(nèi)加入一個(gè)臨時(shí)變量作為中轉(zhuǎn)诈闺,且輸入輸出參數(shù)傳遞的是值類型時(shí)渴庆,在嵌套函數(shù)和閉包內(nèi),造成輸入輸出參數(shù)的任何改變都不會(huì)影響到輸入輸出參數(shù)的原始值雅镊。
例1:
var x = 10
func f( _ a: inout Int) -> Int {
var j = a
let temp: () -> Int = {
j += 1
return j
}
return temp()
}
f(&x)
print(x)
運(yùn)行結(jié)果:
10
例2:
func outer(_ a: inout Int) -> () -> Void {
var j = a
func inner() {
j += 1
}
return inner
}
var x = 10
let f = outer(&x)
f()
print(x)
運(yùn)行結(jié)果:
10