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