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 它不是可以转换为 IntAnyObject - 它 String。使用.integerValue

以上是关于Swift JSON 无法获取第二个变量的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3:如何动态加载图像并将变量传递给第二个视图控制器?

从长变量中获取第二个数字[重复]

获取类型并将第二个变量转换为该类型[重复]

在反应式编程中无法访问第二个函数之外的变量

获取第二个窗口将变量传递给主 ui 并关闭

当第一个脚本运行第二个脚本方法时,第二个脚本无法识别第一个脚本的变量