下面是我从API获取响应的代码(Swift 4.2.1)。但是在调用它时显示了一些错误,
无法分配类型为“ NSDictionary?”的值?键入“字符串?”
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()
答案 0 :(得分:3)
请勿使用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)
答案 1 :(得分:0)
,因为错误显示Cannot assign value of type 'NSDictionary?' to type 'String?'
。您正在将NSDictionary分配给类型为String的变量。
您需要将responseString
的原始声明更改为NSDictionary或另一个变量以存储NSDictionary。