2016-12-02 7 views
0

Как вы добавляете новый ключ в Dictionary в Swift? Я получаю сообщение об ошибке:Как вы добавляете новый ключ в словарь в swift?

Этого класс не является значение ключа кодирования совместимым для ключа адреса ...

Вот мой код:

let user = [ 
    "id": id, 
    "name" : name 
] 

if customer.address != nil { 
    let address = [ 
     "street": customer.address.street, 
     "zip": customer.address.zip, 
    ] 

    user.setValue(address, forKey: "address") 
} 

ОБНОВЛЕНО Код:

var user = [ 
      "id": customer.id, 
      "name" : customer.fullName!, 
      "position" : customer.position != nil ? customer.position! : "" 
     ] 

     if customer.address != nil { 
      let address = [ 
       "street": customer.address!.street, 
       "zip": customer.address!.zip 
      ] 

      user["address"] = address 
     } 
+1

Возможный дубликат [Почему я не могу использовать SetValue для словаря?] (Http://stackoverflow.com/questions/26313847/why-i-can-not-use- setvalue-for-dictionary) –

+2

Почему вы используете словарь в первую очередь? Вы должны создавать модели данных для таких данных. Гораздо лучше (и проще ... и безопаснее) иметь структуру для ваших данных, у которой есть свойства, которые вы можете установить. Swift - это не JavaScript. Прекратите относиться к нему так, как есть. – Fogmeister

+0

@Fogmeister У меня есть модели данных, но это как раз перед отправкой запроса на мой сервер. – Prabhu

ответ

2

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

, например:

var user: [String: Any] = [ 
    "id": "dd", 
    "name" : "ddd" 
] 

let address = ["street": "ss","zip": "124115"] 

user["address"] = address 
+1

Да, вот и все. – Prabhu

1

Просто измените вас Dictionary декальтрация на var вместо константы, а затем используйте subscript, чтобы добавить новое значение с помощью ключа.

var user: [String: AnyObject] = [ 
    "id": id, 
    "name" : name 
] 
user["address"] = address 
+0

Я получаю сообщение об ошибке «не могу присвоить через индекс: subscript is get only» – Prabhu

+0

@Prabhu убедитесь, что словарь 'user' объявлен как' var' (как писал Nirav D), а не 'let' –

+0

Да, я изменил его на var. – Prabhu

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

  • Нет связанных вопросов^_^