Не удается присвоить значение типа 'NSDictionary?'набрать 'String?' - PullRequest
0 голосов
/ 20 мая 2019

Ниже приведен мой код (Swift 4.2.1) для получения ответа от API. Но при вызове он показывает некоторую ошибку как,

Невозможно присвоить значение типа 'NSDictionary?'набрать 'String?'

let task = URLSession.shared.dataTask(with: request) { data, response, error in
   guard let data = data, error == nil else {
      return
   }
   let responseString = String(data: data, encoding: .utf8)
   print("responseString = \(String(describing: responseString))")
   do {
    let jsonResponse = try JSONSerialization.jsonObject(with: data, options: []) as? NSDictionary
     print(jsonResponse!)
     responsevalue = jsonResponse

     let alert1 = UIAlertController(title: "Alert", message: self.responsevalue, preferredStyle: UIAlertController.Style.alert)
     let action1 = UIAlertAction(title: "Ok",style: .default)
     {(ACTION)in
     }
     alert1.addAction(action1)
     self.present(alert1, animated: true, completion: nil)
     }catch let parsingError {
        print("Error", parsingError)

        let alert1 = UIAlertController(title: "Alert", message: parsingError as? String, preferredStyle: UIAlertController.Style.alert)
        let action1 = UIAlertAction(title: "Ok",style: .default)
         {(ACTION)in
         }
         alert1.addAction(action1)
         self.present(alert1, animated: true, completion: nil)
         }
       }
      task.resume()

Ответы [ 2 ]

3 голосов
/ 20 мая 2019

Не используйте NSDictionary.Используйте [String: Any].Вам нужно получить строку сообщения из словаря для отображения в предупреждении.

let jsonResponse = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
print(jsonResponse)
responsevalue = jsonResponse
guard let message = jsonResponse["msg"] as? String else {//Use the key from json
    return
}
let alert1 = UIAlertController(title: "Alert", message: message, preferredStyle: .alert)

В остальной части вместо parsingError используйте parsingError.localizedDescription

let alert1 = UIAlertController(title: "Alert", message: parsingError.localizedDescription, preferredStyle: .alert)
0 голосов
/ 20 мая 2019

как говорит ошибка Cannot assign value of type 'NSDictionary?' to type 'String?'. Вы назначаете NSDictionary переменной, тип которой является String.

Вам необходимо изменить исходное объявление responseString на NSDictionary или другую переменную для хранения NSDictionary.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...