gpt4 book ai didi

ios - 解析通过 Alamofire (Swift) 收到的 JSON 数据时出错

转载 作者:搜寻专家 更新时间:2023-11-01 07:02:34 26 4
gpt4 key购买 nike

我正在与一家非营利组织合作,帮助他们为他们的网站开发移动应用程序(因此他们为我提供了后端服务等)

他们的登录 PHP 服务接受 JSON 格式的数据,并以 JSON 数据的形式返回 true 或 false 值,但我在处理 Swift 中的响应时遇到了问题。我正在使用 Alamofire 连接到 HTTP 服务。

我附上了我的代码和下面收到的异常消息,非常感谢您的帮助

func authenticateUser (un: String, pw: String)  -> Bool
{
var checker = false
let jsonDict : [String: String] = ["volunteer_email": un, "volunteer_pass": pw]

Alamofire.request("www.sampleurl.com/login.php", method: .post, parameters: jsonDict, encoding: JSONEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in

switch(response.result) {
case .success(_):
if response.result.value != nil{
print (response.result.value)
let resp = response.result.value as! NSDictionary
let results = resp["status"] as! [[String:Any]]
//Change the boolean value of checker based on the value of the results constant
print (results)
}
break

case .failure(_):
print(response.result.error)
break
}
}

return checker;
}

日志:

Optional(<__NSSingleObjectArrayI 0x600000009b50>( { status = false; } ) ) Could not cast value of type '__NSSingleObjectArrayI' (0x10e28c528) to 'NSDictionary' (0x10e28d1a8). 2018-05-09 12:13:00.177091+0530 TestApp1 [16680:817883] Could not cast value of type '__NSSingleObjectArrayI' (0x10e28c528) to 'NSDictionary' (0x10e28d1a8). (lldb)

记录 response.result.value:

注意:"status":"false"/"true"是网络服务的输出

Optional(<__NSSingleObjectArrayI 0x60400001b160>( { status = false; } ))

注意:我做了一些研究,我了解 NSSingleObjectArray 是什么以及它的成因,但我被困在这里,因为该服务仅将一个 JSON 值传回我的应用程序。有没有办法在不要求组织更改代码的情况下处理这个问题?从逻辑上讲,我不应该能够将响应转换为 NSDictionary 而不管它的大小吗?

此外,我之所以指定返回的数据可以是任何类型,是因为我遇到了一个问题,可以在这里找到:

Other StackOverflow question

提前致谢:)

最佳答案

由于您使用的是 Alamofire 的 .responseJSON,因此您应该使用 Alamofire 的参数化枚举。它在 .success 中提供了 json 对象。所以做 case .success(_) 是浪费。

继续这个,根本不需要类型转换 response.result.value

Alamofire
.request("www.sampleurl.com/login.php",
method: .post,
parameters: jsonDict,
encoding: JSONEncoding.default,
headers: nil)
.responseJSON { (response) in
switch(response.result) {
case .success(let responseJSON):
print(responseJSON)

/*
As an improvement:
To obtain an easy-access object, convert responseJSON to either a:
1. Codable model:
let model = JSONDecoder().decode(SomeModel.self,
from: responseJSONData)
2. SwiftyJSON object: (available on GitHub)
let json = JSON(responseJSON)

Doing so will basically make accessing the inner elements easier.
*/...

case .failure(let error):
print(error)
}
}

顺便说一句,仅供引用:响应是字典数组,而不是字典数组的字典。

关于ios - 解析通过 Alamofire (Swift) 收到的 JSON 数据时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50247262/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com