У меня ответ сервера
(
{
agreementId = "token.virtual.4321";
city = AMSTERDAM;
displayCommonName = "bunch-of-alphanumeric";
displaySoftwareVersion = "qb2/ene/2.7.14";
houseNumber = 22;
postalCode = zip;
street = "";
}
)
как получить значение agreementId? response ['agreementId'] не работает. Я пробовал пример кода с.first, но я не могу заставить его работать.
Некоторая дополнительная информация, я делаю http-вызов на сервере с alamofire. Я пытаюсь разобрать json на постоянный ответ:
let response = JSON as! NSDictionary
Однако это возвращает сообщение об ошибке
Could not cast value of type '__NSSingleObjectArrayI' (0x1083600) to 'NSDictionary' (0x108386c).
Итак, теперь проанализируйте json для массива, который, кажется, работает. Код выше - это то, что
let response = JSON as! NSArry
print(response)
выплевывает.
Теперь мне нужно только получить значение из ключа "agreementId", и я не знаю, как это сделать.
В swift вам нужно использовать родной тип Swift Array/[]
и Dictionary/[:]
вместо NSArray
и NSDictionary
, если вы укажете тип, подобный выше, более конкретный, то компилятор не будет жаловаться. Также используйте опциональную упаковку с помощью if let
или guard let
чтобы предотвратить сбой.
if let array = JSON as? [[String:Any]] {//Swift type array of dictionary
if let dic = array.first {
let agreementId = dic["agreementId"] as? String ?? "N/A"//Set default value instead N/A
print(agreementId)
//access the other key-value same way
}
}
Примечание. Если у вас есть более одного объекта в вашем массиве, вам нужно просто пропустить массив, чтобы получить доступ к каждому словарю массива.
if let array = JSON as? [[String:Any]] {//Swift type array of dictionary
for dic in array {
let agreementId = dic["agreementId"] as? String ?? "N/A"//Set default value instead N/A
print(agreementId)
//access the other key-value same way
}
}
response
, получается ли словарь путем анализа json? Отладьте ваш код и проверьте, какойresponse
самом деле .