Swift JSON 无法获取第二个变量
Posted
技术标签:
【中文标题】Swift JSON 无法获取第二个变量【英文标题】:Swift JSON cannot get second variable 【发布时间】:2014-07-20 08:17:28 【问题描述】:我在 Laravel (php) 中为我的应用程序构建了一个后端 API。我正在调用的方法(创建用户)的返回是:
"success":true,"userid":"23"
但是当在 Swift 中访问 userid
时它返回一个空值?它可以访问success
变量。
这是我的请求的代码:
// create the user
var request = NSMutableURLRequest(URL: NSURL(string: "http://localhost/laravel/myapi/public/createUser"))
var session = NSURLSession.sharedSession()
request.HTTPMethod = "POST"
var params = ["username":txtUsername.text, "email":txtEmail.text, "password":txtPassword.text] as Dictionary
var err: NSError?
request.HTTPBody = NSJSONSerialization.dataWithJSONObject(params, options: nil, error: &err)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
var task = session.dataTaskWithRequest(request, completionHandler: data, response, error -> Void in
// println("Response: \(response)")
var strData = NSString(data: data, encoding: NSUTF8StringEncoding)
println("Body: \(strData)")
var err: NSError?
let json = NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments & .MutableLeaves, error: &err) as NSDictionary
if(err)
println(err!.localizedDescription)
else
var success = json["success"] as? Int
if(success == 1)
var id = json["userid"] as? Int
self.lblTaken.text = "\(id)"
)
task.resume()
println("Body: \(strData)")
打印出来:
Body: "success":true,"userid":"23"
但是当尝试访问userid
变量时,它返回nil
我在尝试访问用户 ID 时是否做错了什么?
更新
如果我打印出来:
println(json.valueForKey("userid"))
它会打印出用户 ID,但如果我将它分配给变量,该变量仍会返回 null
【问题讨论】:
`println("JSON:(json)") 显示什么? @Paulw11 它打印出来:JSON: success = 1; userid = 23;
【参考方案1】:
userId 以字符串形式出现。所以,问题是,您尝试使用 as 将字符串转换为整数?并失败。
来自 Apple 文档:
作为?运算符将表达式条件转换为指定类型。作为?运算符返回指定类型的可选项。在运行时,如果强制转换成功,则表达式的值被包装在一个可选项中并返回;否则,返回的值为 nil。如果保证转换为指定类型会失败,则会引发编译时错误。例如,转换为既不是表达式类型的子类也不是超类的类型是错误的。
【讨论】:
是的,当然,您可以将 bool 转换为 int,但不能将字符串转换为 int。 啊,我明白了,如果我将id
作为AnyObject
返回,那么它会返回userid
。有没有办法将它从 AnyObject
转换为 int
?
它不是可以转换为 Int
的 AnyObject
- 它是 String
。使用.integerValue
。以上是关于Swift JSON 无法获取第二个变量的主要内容,如果未能解决你的问题,请参考以下文章