NSJSONSerialization 与 Swift 2

Posted

技术标签:

【中文标题】NSJSONSerialization 与 Swift 2【英文标题】:NSJSONSerialization with 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?

【问题讨论】:

看看我的例子:***.com/a/32187781/2227743 也检查一下....***.com/questions/32815592/nsurl-problems-in-swift/… 【参考方案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 你不应该把它放在这里。这是一个不同的问题。请创建一个新的。不过,一旦我回到办公室,我会检查您更新的问题 好的,我一会儿把链接发过来。

以上是关于NSJSONSerialization 与 Swift 2的主要内容,如果未能解决你的问题,请参考以下文章

NSDictionary 到 JSON 与 NSJSONSerialization 问题

NSJSONSerialization 与 C# Rest 服务

SWI Prolog与GNU Prolog - SWI下的CLP(FD)问题

NSJSONSerialization 不解析这个 JSON

取消 NSJSONSerialization - 键入时搜索,请求重叠

NSJSONSerialization JSONObjectWithData:options:error: 编码问题