将其他项添加到字典中

时间:2015-01-19 09:52:36

标签: swift

想在这个组合中将约翰和彼得一起添加:

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

Println只给了约翰而不是彼得和约翰。有没有办法在不覆盖彼得的情况下添加约翰?

2 个答案:

答案 0 :(得分:0)

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

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)

答案 1 :(得分:0)

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

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

您已将字典声明为包含String类型的值,但正如您所描述的那样,现在您希望字典值为StringArray。这些类型值类型的常见类型是Any(如果您已导入Foundation,则它可以是AnyObject;但这是Swift异常)。然后,您将需要“打击”类型系统以强制“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