【问题标题】:NSJSONSerialization with Swift 2NSJSONSerialization 与 Swift 2
【发布时间】:2015-09-30 13:01:39
【问题描述】:
import UIKit

let url = NSURL(string: "http://example.com/test.php")
let request = NSMutableURLRequest(URL: url!)

// modify the request as necessary, if necessary

let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
    data, response, error in

    if data == nil {
        print("request failed \(error)")
        return
    }

    var parseError: NSError?
    if let json = NSJSONSerialization.JSONObjectWithData(data!, options: nil, error: &parseError) as? [String: String] {
        if let name = json["name"] {
            print("name = \(name)")   // if everything is good, you'll see "William"
        }
    } else {
        print("parsing error: \(parseError)")
        let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
        print("raw response: \(responseString)")
    }
}
task.resume()

此代码在更新到 Xcode 7 之前有效,但现在出现错误

if let json = NSJSONSerialization.JSONObjectWithData(data!, options: nil, error: &parseError) as? [String: String] {

谁能帮我把它转换成 Swift 2?

【问题讨论】:

标签: json swift2


【解决方案1】:

给你

let url = NSURL(string: "http://example.com/test.php")
    let request = NSMutableURLRequest(URL: url!)

    // modify the request as necessary, if necessary

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
        data, response, error in

        if data == nil {
            print("request failed \(error)")
            return
        }

        do{
            if let json = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? [String: String] {
                if let name = json["name"] {
                    print("name = \(name)")   // if everything is good, you'll see "William"
                }
            } else {
                let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
                print("raw response: \(responseString)")
            }
        }catch {
            print("bom bom bom error")
        }

    }
    task.resume()

【讨论】:

  • 谢谢你的回答,我现在只有一个问题,如果我把你的代码放到一个函数中,而不是让函数返回一个字符串,我无法让它返回名称。它可以很好地打印名称,但它永远不会让我将其放入变量中,它总是告诉我在 task.resume() 执行后变量为空,这是为什么呢?
  • 请写一个新问题并给我链接
  • 我在问题中将其更详细地称为“添加”。 XD
  • 你不应该把它放在这里。这是一个不同的问题。请创建一个新的。不过,一旦我回到办公室,我会检查您更新的问题
  • 好的,我一会儿把链接发过来。
猜你喜欢
  • 2015-03-11
  • 1970-01-01
  • 1970-01-01
  • 2015-06-26
  • 1970-01-01
  • 2016-05-14
  • 2016-07-31
  • 2017-03-19
  • 1970-01-01
相关资源
最近更新 更多