2015-01-19 3 views
1

Хотел бы добавить Джона вместе с Петром в этой комбинации:Добавление дополнительных элементов в словарь

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

Println дает только Джон назад вместо того, чтобы Петр и Иоанн. Есть ли способ добавить Джона, не перезаписывая Питера?

+1

Сделайте свой массив типа '[String: AnyObject]' и присвоить массив значений ключа, где вы хотите несколько значений, так это будет выглядеть как '[«Пункт»:«Молоко»,«DrinksMilk »: [« Джон »,« Питер »]]. –

ответ

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) 
0

Похоже, вы пытаетесь закодировать тип данных в словаре. Лучший подход, ничего больше о вашей конкретной проблеме, не зная, является определение класса для этого:

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

Вы объявили ваш словарь для хранения значений типа String, но, как вы описали, теперь вы хотите значение словаря должно быть String или Array. Общий тип типов типов этого типа - Any (это может быть AnyObject, если вы импортировали Foundation, но это аномалия Swift). Затем вам нужно «сразиться» с системой типов, чтобы принудить поле «DrinksMilk» как модифицируемый массив и добавить «Джон».

// 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 
+0

Ничего себе, это было потраченное впустую усилие. Удачи. – GoZoner

Смежные вопросы