我有以下操場代碼:變異異步塊內INOUT功能放慢參數
import UIKit
import XCPlayground
class A {
var arr : [UIImage] = []
func addItem(inout localArr: [UIImage]) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (Int64)(2 * NSEC_PER_SEC)), dispatch_get_main_queue()) {() -> Void in
localArr.append(UIImage())
print("from inside function localArr: \(localArr)")
print("form inside function: \(self.arr)")
}
}
}
let a = A()
a.addItem(&a.arr)
print("instant print :\(a.arr)")
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (Int64)(3 * NSEC_PER_SEC)), dispatch_get_main_queue()) {() -> Void in
print("print after delay: \(a.arr)")
}
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
輸出是:
instant print :[]
from inside function localArr: [<UIImage: 0x7f99e8706f10>, {0, 0}]
form inside function: []
print after delay: []
我的問題是,爲什麼localArr
不一樣self.arr
內addItem
和a.arr
以外不一樣?我的期望是,當我通過參數inout
我應該能夠對實際對象進行操作,而不是副本,但顯然這不是發生的情況。
編輯:所以感謝dfri答案我知道爲什麼這不起作用。 inout
確實是call-by-copy-restore,請檢查另一個答案here。現在,有關如何實際使閉包捕獲對原始對象的引用的任何建議?或者也許我應該使用其他技術來實現我想要的?
你的代碼和輸出不match..please編輯 –
編輯,一個print語句從'addItem'內心缺少什麼功能。 – lawicko