向字典添加额外的项目

Adding additional items to dictionary

想在这个组合中添加 John 和 Peter:

var myData0: [String: String] = ["Item": "Milk", "Description": "Milk is white", "DrinksMilk": "Peter"]
myData0["DrinksMilk"] = "John"
println(myData0)

Println 只返回 John 而不是 Peter AND John。有没有办法在不覆盖 Peter 的情况下添加 John?

如果你想保留字典的字符串值,你可以这样做

var myData0: [String: String] = ["Item": "Milk", "Description": "Milk is white", "DrinksMilk": "Peter"]
myData0["DrinksMilk"] = myData0["DrinksMilk"]! + ", John"
println(myData0)

如果不是,您可以像这样将字典值的类型更改为 AnyObject :

 var myData0: [String: AnyObject] = ["Item": "Milk", "Description": "Milk is white", "DrinksMilk": "Peter"]
myData0["DrinksMilk"] = [myData0["DrinksMilk"]!, "John"]
println(myData0)

您似乎正试图将数据类型编码到字典中。一个更好的方法,不知道更多关于你的具体问题,是为此定义一个 class:

class Drink {
  var name:String
  var desc:String
  var drinkers:[Person]
  // ...
  func addDrinker (person:Person) {
   drinkers.append(person)
  }
}

您已经声明您的字典保存 String 类型的值,但是,正如您所描述的,现在您希望字典值为 StringArray。这些类型值类型的常见类型是 Any(如果您导入了 Foundation,它可以是 AnyObject;但这是 Swift 异常)。然后,您需要 'fight' 类型系统将 "DrinksMilk" 字段强制为可修改数组并添加 "John".

// First extract `"DrinksMilk"` and force it to a mutating array:
var drinkers:[String] = myData0["DrinksMilk"]! as [String]

// Add the new drinker
drinkers.append("John")

// Reassign back into data
myData0["DrinksMilk"] = drinkers