无法读取 Swift 异步请求响应



我正在尝试从用 Swift 编写的 iOS 应用程序连接到数据库。我找不到替换所有其他函数的功能,这些函数在最新的iOS更新(9.2?其中一些函数是 sendSyncRequest 和 sendAsyncRequest。

我想从数据库中读取数据和响应。我正在使用以下代码:

 NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: {(response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in
        let res = response as! NSHTTPURLResponse
        if(res.statusCode >= 200 && res.statusCode < 300) {
            let jsonData:NSDictionary = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
        }
    })

我在第一行收到错误:

从类型"(NSURLResponse?, NSData?, NSError?) 抛出 -> Void" 的抛出函数到非抛出函数类型"(NSURLResponse?, NSData?, NSError?) -> void" 的无效转换

但是,当我注释掉if语句中的行时(让jsonData:NSDictionary = try ...),错误消失了。

我知道这个函数已被弃用;我找不到其他任何东西。

如何读取来自异步请求的响应而不会出错?

你缺少 do/catch

NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) { (response, data, error) -> Void in
    let res = response as! NSHTTPURLResponse
    do {
    if(res.statusCode >= 200 && res.statusCode < 300) {
        let jsonData:NSDictionary = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
    }
    } catch {
    }
}

但是在 swift 中更简单、更好的方法是这个网络库:Alamofire

例:

Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])
         .responseJSON { response in
             print(response.request)  // original URL request
             print(response.response) // URL response
             print(response.data)     // server data
             print(response.result)   // result of response serialization
             if let JSON = response.result.value {
                 print("JSON: (JSON)")
             }
         }

最新更新