我已經字典類實例的數組,概述如下:Swift 2.0 - 變量在閉包中複製?
class SomeViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
private var array = [[String: AnyObject]]()
override func viewDidLoad() {
super.viewDidLoad()
}
// tableview delegates
func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {
print(「array address: \(unsafeAddressOf(array))」) // 0x000000015cf0ebd0
let option = UITableViewRowAction(style: .Default, title: 「Option」, handler: { [weak self] (_, _) in
guard let strongSelf = self else { return }
print(「array address1: \(unsafeAddressOf(strongSelf.array))」 // 0x000000015cd10c50
})
return [option]
}
}
爲什麼的array
地址改變(0x000000015cf0ebd0
VS 0x000000015cd10c50
),我只是抓住它UITableViewRowAction
初始化?
感謝,
謝謝你的問題,現在我知道'Array'是值類型的,我認爲它應該是引用類型。我的問題是:我更新'數組',但總是無法得到它的更新。現在我知道我正在處理它的副本,而不是實際的'array'。有沒有辦法「強制」編譯器使用它作爲參考? – quanguyen
最簡單和最穩定的方法是將'array'聲明爲'NSArray'。它會丟失一些類型信息,但可以包含'[String:AnyObject]'的元素,可以在需要時用'as!'轉換爲'[[String:AnyObject]]'。有人可以向您展示更多Swift-y提案,但它們可能會更復雜一些。 – OOPer