我正在尝试从用 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)")
}
}