4

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] になります

クロージャー内の元の変数 () を変更するにはどうすればよいですか?

アップデート:

実際には、配列をオブジェクトに入れることでこのケースを処理する回避策があるため、このオブジェクトを参照によって関数に渡すことができ、関数内の同じ配列インスタンスを変更できます。しかし、私はそれをアーカイブする賢い方法を見たいと思っています

4

1 に答える 1