"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
そして Dictionary
は struct
、 あれは 値の型。別の変数または定数に代入すると、それがコピーされます。例えば:
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