Alamofire не может привести тип NSCFString к словарю - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь использовать Alamofire для получения ответа от веб-сервиса.Служба возвращает строку в формате JSON, но я получаю сообщение об ошибке: «Не удалось привести значение типа NSCFString к NSDictionary»

Мой код:

func getSoFromMo() {
        let apiUrl: String = "http://xxxxxxxxxxxxxxx"

        Alamofire.request(apiUrl)
            .responseJSON{ response in
                print(response)

                if let resultJSON = response.result.value {
                    let resultObj: Dictionary = resultJSON as! Dictionary<String, Any>  <==== Breaks on this line
                    self.soNum = resultObj["soNumber"] as! String
                    self.lblValidate.text = "\(self.soNum)"
                    } else {
                    self.soNum = "not found!"
                }
        }

Когда я печатаюответ, который я получаю - УСПЕХ: {"SoNumber": "SO-1234567"}

Когда я проверяю URL с помощью Postman, результат будет: "{\" soNumber \ ": \" SO-1234567 \ "} "включая все кавычки, поэтому формат мне не совсем корректен, возможно, начальные и конечные двойные кавычки отбрасывают его?

1 Ответ

0 голосов
/ 21 марта 2019

Ошибка понятна. Результатом является строка JSON, а не десериализованный словарь.

Вы должны добавить строку для десериализации строки

func getSoFromMo() {
    let apiUrl: String = "http://xxxxxxxxxxxxxxx"

    Alamofire.request(apiUrl)
        .responseJSON { response in
            print(response)
            do {
                if let data = response.data, 
                   let resultObj = try JSONSerialization.jsonObject(with: data) as? [String:Any] {
                      self.soNum = resultObj["soNumber"] as! String
                      self.lblValidate.text = self.soNum // no String Interpolation, soNum IS a string
                } else {
                    self.soNum = "not found!"
                }
            } catch {
               print(error)
            }
    }
}
...