/ 辞書への参照の格納 - swift

スウィフト辞書への参照の保存 - swift

"Swift"コードを保存しようとしています。辞書の中のコレクションの集まり(だからplistとして簡単に直列化できる) Objective-Cでは十分に単純ですが、Swiftで動作がわかりません。

プレイグラウンド可能な例:

import Cocoa
typealias StringMap=Dictionary<String, String>
var collections = Dictionary<String, Array<StringMap>>();

// Add an empty "books" collection
collections["books"] = Array<StringMap>();

// Look up the books collection
var books = collections["books"] as Array<StringMap>!;

// Add an item to it
var book = ["name": "The Complete Peanuts", "author": "Charles M. Schulz"]
books.append(book);

// This is now 1
books.count

// Look up the books collection again
books = collections["books"] as Array<StringMap>!;

// This is zero
books.count

辞書からbooks配列を取得すると、配列のコピーではなく、そのコピーが取得されるようです。私はそれを更新できるように私は参照が欲しいのです。

回答:

回答№1は1

スイフトでは、 Array そして Dictionarystruct、 あれは 値の型。別の変数または定数に代入すると、それがコピーされます。例えば:

var a:[Int] = []
var b = a
b.append(42)

// a -> []
// b -> [42]

ですから、あなたの場合は、すべての作業を collections 変数:

typealias StringMap=Dictionary<String, String>

var collections = Dictionary<String, Array<StringMap>>();
collections["books"] = Array<StringMap>();

var book = ["name": "The Complete Peanuts", "author": "Charles M. Schulz"]
collections["books"]!.append(book)

collections["books"]!.count

あるいは、配列を用意して辞書に代入します。

var collections = Dictionary<String, Array<StringMap>>();

var books = Array<StringMap>();
var book = ["name": "The Complete Peanuts", "author": "Charles M. Schulz"]
books.append(book)

collections["books"] = books