Swift3, как я могу получить значение определенного ключа в строке?

-1

У меня ответ сервера

(
    {
    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", и я не знаю, как это сделать.

  • 0
    каков response , получается ли словарь путем анализа json? Отладьте ваш код и проверьте, какой response самом деле .
  • 0
    К какому типу относится переменная JSON?
Теги:
arrays

1 ответ

2
Лучший ответ

В 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
    }
}
  • 1
    Спасибо! Это было решение. И спасибо за другие советы, мне очень помогает, как быстрый новичок
  • 0
    @JeroenSwets Добро пожаловать, приятель :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню