3
在Swift集合默認傳值,我們可以使用inout
使它在函數參數中通過引用傳遞,但我們如何在閉包捕獲變量中做到這一點?通過引用快速關閉捕獲數組
var list = [1, 2, 3]
func edit(inout list: [Int]) {
list.append(4)
dispatch_async(dispatch_get_main_queue()) {
list.append(5)
}
}
edit(&list)
...// after dispatch_async was executed
NSLog("\(list)")
結果將是[1,2,3,4]
如何修改內部閉合原始變量()?
UPDATE:
其實我有一種解決方法通過將陣列到一個對象來處理這種情況,所以我可以通過引用傳遞該對象的函數,我們可以修改函數內的同一陣列實例。但我希望看到任何聰明的方法來存檔,
感謝您的回覆,但有沒有機會實現它,而無需訪問函數內的任何實例變量?你可以把它當作一個靜態函數 – Alan
是的,我根據你的需要編輯我的答案。 – Lawliet
謝謝,你的答案是一種獲取數組的新副本的方法,我們可以在完成閉包中更新實例數組變量。但我想知道任何在傳入函數後「直接」修改原始數組的機會。對於我在這個問題上的不好解釋抱歉。我試過你的代碼,全局'list'變量的結果仍然是[1,2,3] – Alan