嗨,我正在努力实现swifts-new try-catch,这是一个关于连接到mysql数据库的旧教程。
这是旧教程的代码:
func getPost(callback:(NSDictionary) -> ()){
request("http://myurl.php", callback: callback)
}
func request(url:String, callback:(NSDictionary) -> ()){
var nsURL = NSURL(string: url)
let task = NSURLSession.sharedSession().dataTaskWithURL(nsURL!){
(data, response, error) in
var error:NSError?
var response = NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as NSDictionary
callback(response)
}
task.resume()
}
这是我实现try-catch的失败尝试,因为它希望在响应var 中出现错误
func getPost(callback:(NSDictionary) -> ()){
request("http://url.php", callback: callback)
}
func request(url:String, callback:(NSDictionary) -> ()){
var nsURL = NSURL(string: url)
let task = NSURLSession.sharedSession().dataTaskWithURL(nsURL!){
(data, response, error) in
do {
var response = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
callback(response)
} catch error& {
}
}
task.resume()
}
我真的很感激有人帮我把语法弄对,谢谢!
完整的工作代码:
func getFleet(){
getPost{
(response) in
print(response)
}
}
func getPost(callback:(NSDictionary) -> ()){
request("http://url.com/SpaceAcademy/SaveFleet.php", callback: callback)
}
func request(url:String, callback:(NSDictionary) -> ()){
let nsURL = NSURL(string: url)
let task = NSURLSession.sharedSession().dataTaskWithURL(nsURL!) { (data, nsURLResponse, error) -> Void in
if let error = error {
//act on error from server
} else {
do {
var response = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
callback(response)
} catch {
// act on thrown error
}
}
}
task.resume()
}
catch不会捕获来自服务器的错误,只捕获解析json数据时可能抛出的错误。你需要同时处理它们。
func request(url:String, callback:(NSDictionary) -> ()){
let nsURL = NSURL(string: url)
let task = NSURLSession.sharedSession().dataTaskWithURL(nsURL!) { (data, nsURLResponse, error) -> Void in
if let error = error {
//act on error from server
} else {
do {
var response = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
callback(response)
} catch {
// act on thrown error
}
}
}
task.resume()
}