实现 Swift 关于连接我的 SQL 的新尝试捕获旧教程



嗨,我正在努力实现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()
}

最新更新