Iは、辞書のクラスインスタンスのアレイは、以下に概説している: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
0x000000015cd10c50
対)に変更されている私はちょうどUITableViewRowAction
初期にそれを捕捉よう?
おかげで、
あなたの質問に感謝、今私は '配列'が値型であることを知っている、私はそれが参照型であるべきだと思った。私の問題は次のとおりです: 'array'を更新しますが、常に更新されません。今私は実際の配列ではなく、コピーで作業していることを知っています。コンパイラーを参照として使用するように強制する方法はありますか? – quanguyen
最も単純で最も安定した方法は、 '配列'を 'NSArray'として宣言しています。型情報は失われますが、 '[String:AnyObject]'の要素を含むことができ、必要に応じて '[[String:AnyObject]]'に 'as! 'でキャストできます。誰かがあなたにスウィフト・イヤー・プロポーザルをもっと見ることができますが、少し複雑かもしれません。 – OOPer