gpt4 book ai didi

ios - 使用 AFNetworking 时如何从 Anyobject 获取值

转载 作者:行者123 更新时间:2023-11-28 09:19:22 24 4
gpt4 key购买 nike

我在我的新个人项目中使用了 AFNetworking 和 swift。当我向服务器发送登录请求时,服务器将返回一个带有 json 的响应,而 AFNetworking 会将 json 转换为 Anyobject。但是当我尝试使用 anyobject 时遇到了一些问题。

登录成功时的json数据如下:

{"code":0,"data":{"id":"1"}}

这是我的登录码:

manager.POST("\(SERVER_HOST)User/login", parameters: params, success: { (operation:AFHTTPRequestOperation!, response:AnyObject!) -> Void in
var code = response.objectForKey("code") as Int

if code == 0{
var data = response.objectForKey("data") as NSDictionary
var id = data.objectForKey("id")?.integerValue

self.performSegueWithIdentifier("loginSucceed", sender: self)
}

})

所以我的问题是:代码可以工作,但是当我使用

var id = data.objectForKey("id") as Int

就像我获取代码值的方式一样,应用程序崩溃了,id 得到了一个 nil 值。为什么?

另一个问题是:使用更复杂的 json 字符串获取值的正确方法是什么。任何帮助将不胜感激

最佳答案

当你这样做时你的代码崩溃了:

var id = data.objectForKey("id") as Int

因为 "id" 对应的值是 String "1" 而不是 Int 1。如果类型错误,强制转换 as 会崩溃。使用条件转换 as? 并将其与可选绑定(bind)结合起来会更安全:

if let code = response["code"] as? Int {
// if we get here we know "code" is a valid key in the response dictionary
// and we know we got the type right. "code" is now an unwrapped `Int` and
// is ready to use.

if code == 0 {
if let data = response["data"] as? NSDictionary {
// if we get here, we know "data" is a valid key in the response
// dictionary and we know it holds an NSDictionary. If it were
// some other type like `Int` we wouldn't have entered this block

if let id = data["id"] as? String {
// if we get here, we know "id" is a valid key, and its type
// is String.

// Use "toInt()" to convert the value to an `Int` and use the
// default value of "0" if the conversion fails for some reason
let idval = id.toInt() ?? 0
println("idval = \(idval)")
}
}
}
}

关于ios - 使用 AFNetworking 时如何从 Anyobject 获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26007797/

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