2016-09-07 2 views
3

Я пытаюсь создать вложенный словарь в Swift, поэтому я могу изменить его на JSON позже. Я устанавливаю это так:Вложенные словари Быстрые фигурные скобки?

let item: [String: AnyObject] = [ 
     "item": item, 
     "price": price, 
     "date": date, 
     "time": time, 
     "location": [ 
      "store": "Store name", 
      "address": "1234 Untitled Dr.", 
      "city": "City", 
      "state": "CA", 
      "zip": "12345" 
     ] 
     ] 
print(item) 

Когда я запускаю это, выход заключается в следующем:

["price": 15.69, "location": { 
    address = "12350 Carmel MT Road"; 
    city = "City"; 
    state = CA; 
    store = "Store name"; 
    zip = 12345; 
}, "item": item, "date": , "time": ] 

Значение местоположения должно быть вложенным словарь. Почему в фигуре находятся фигурные скобки? И почему ценности непоследовательны в том, есть ли кавычки? Кроме того, когда я пытаюсь получить доступ к:

print(items["location"]!["store"]) 

Я сказал я:

Не может индексировать значение типа `[[String: AnyObject]]» с индексом типа 'String'

+0

Словари - это структуры, вам нужно сделать [String: Any] Мне кажется – Knight0fDragon

+0

Вы не можете индексировать '[[String: AnyObject]]', потому что это массив словарей. – WMios

+0

Попробуйте выполнить печать: '' 'print ((item [" location "] as? [String: AnyObject])? [" Store "])' '' – mbuff24

ответ

4

Короткий ответ:
Использование [String: Any] вместо [String: AnyObject].

Более длинный ответ::
Дела в том, Фонд автоматически перенаправляет Swift основных типов в какао. Это, как сказано, Swift Dictionary автоматически соединяется с NSDictionary из-за ограничения AnyObject, структура Swift не может быть отлита до AnyObject и Dictionary является структурой.

print функция вызывает description свойство, которое для NSDictionary с имеет фигурные скобки.

При указании Any вместо AnyObject Swift просто установит тип переменной в словарь, который имеет квадратные скобки description.

P.S.
Что касается subscript вещь, думаю, у вас есть массив там, поэтому вы должны использовать что-то вроде items[0]["location"]!["store"].

+0

Имеет смысл! Кроме того, спасибо за P.S., я полностью забыл об этом. Должен был назвать мой массив лучше. –

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