在Swift字典中存储引用

在Swift字典中存储引用,swift,Swift,我正在尝试编写一些Swift代码,将集合集合的集合存储在字典中(这样就可以轻松地将其序列化为plist)。Objective-C足够简单,但我在Swift中看到了一些行为,我不理解 可播放的示例: import Cocoa typealias StringMap=Dictionary<String, String> var collections = Dictionary<String, Array<StringMap>>(); // Add an empt

我正在尝试编写一些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
导入可可粉
typealias StringMap=字典
var集合=字典();
//添加一个空的“books”集合
集合[“图书”]=Array();
//查一下藏书
var books=集合[“books”]作为数组!;
//向其中添加一项
var book=[“姓名”:“完整的花生”,“作者”:“查尔斯·M·舒尔茨”]
书。附加(书);
//现在是1
书,伯爵
//再查一下藏书
books=集合[“books”]作为数组!;
//这是零
书,伯爵

从字典中检索books数组似乎是获取数组的副本,而不是对它的引用。我想要一个参考,这样我可以更新它。

在Swift中,
数组和
字典是
结构,也就是说。当您将其分配给另一个变量或常量时,它将被复制。例如:

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

// a -> []
// b -> [42]
因此,在您的情况下,您应该从
集合
变量执行所有工作:

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
typealias StringMap=字典
var集合=字典();
集合[“图书”]=Array();
var book=[“姓名”:“完整的花生”,“作者”:“查尔斯·M·舒尔茨”]
收藏[“书籍”]!。附加(书)
收藏[“书籍”]!。计数
或者,准备数组并分配给字典:

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
var collections=Dictionary();
var=Array();
var book=[“姓名”:“完整的花生”,“作者”:“查尔斯·M·舒尔茨”]
书。附加(书)
收藏[“书籍”]=书籍

实际上,您在上一个
books=coll…
中所做的是为其分配一个新实例,该实例当然是空的。