![](/img/trans.png)
[英]Could to cast value of type '__NSArray0' to 'CIRectangleFeature'
[英]Could not cast value of type '__NSArray0' to 'NSDictionary'
當我解析我的 json 響應時,這是我的錯誤
無法將“__NSArray0”(0x104bcd838)類型的值轉換為“NSDictionary”(0x104bcf818)。
這是我的代碼
@IBAction func LoginAction(_ sender: Any) {
let parameters: Parameters=[
"email":emailUser.text!,
"password":passWord.text!,
]
let url2 = "http://marwen1994.alwaysdata.net/Carpooling/public/loginpost.php"
Alamofire.request(url2, method: .post, parameters: parameters).responseJSON
{
response in
let A = response.result.value as! Dictionary<String,Any>
let list = A["items"] as! Dictionary<String,Any>
let nom = list["name"] as! String
let pass = A["password"] as! String
let email = list["email"] as! String
let adresse = A["adresse"] as! String
let DateNaissance = A["DateNaissance"] as! String
let id = A["id"] as! Int
let numTel = A["num_tel"] as! Int
if(pass == self.passWord.text)
{
UserDefaults.standard.set(true, forKey: "ConnectionStatus")
UserDefaults.standard.set(id, forKey: "ConnectedID")
UserDefaults.standard.set(nom, forKey: "nom")
// UserDefaults.standard.set(prenom, forKey: "prenom")
UserDefaults.standard.set(email, forKey: "email")
UserDefaults.standard.set(adresse, forKey: "adresse")
UserDefaults.standard.set(pass, forKey: "motDePasse")
UserDefaults.standard.set(numTel, forKey: "numTel")
UserDefaults.standard.set(DateNaissance, forKey: "DateNaissance")
self.performSegue(withIdentifier: "toProfile", sender: nil)
}
else{
let alert = UIAlertController(title: "Woah!!!", message: "You inserted a wrong email or a wrong password! Please enter a valid mail and password.", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Ok", style: .cancel, handler: nil))
self.present(alert, animated: true)
}
}
}
如果沒有看到實際的 JSON 響應,很難知道錯誤在哪里,但這可能是一個數組而不是一個字典
let list = A["items"] as! Dictionary<String,Any>
應該是這樣的
let list = A["items"] as! Array
如果您可以考慮使用Codable
這可能會有所幫助
struct JsonResponse: Decodable {
let items: [Item]
}
struct Item: Decodable {
let id: String
let name: String
let email: String
let encrypted_password: String
let num_tel: String
let adresse: String
let DateNaissance: String
}
實際的解碼是這樣完成的
let decoder = JSONDecoder()
do {
let jsonResponse = try decoder.decode(JsonResponse.self, from: data)
for item in jsonResponse.items {
UserDefaults.standard.set(item.name, forKey: "nom")
UserDefaults.standard.set(item.email, forKey: "email")
//and so on
}
} catch {
print("Decode error: \(error)")
}
data
是response
的 json 消息,我不知道 Alamofire 是如何工作的,因此您需要弄清楚如何正確訪問它。
“items”中有一個數組,只有一個元素,可以像這樣訪問它
if let A = response.result.value as? Dictionary<String,Any>, let list = A["items"][0] as? Dictionary<String,Any> {
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.