额外的参数'error'调用中。Swift 2.0 中的编译错误



我目前正在通过这个示例应用程序学习Swift 2.0和OAuth的集成:https://github.com/soundcloud/iOSOAuthDemo

下面的代码片段导致了一些问题,并导致应用程序在编译时失败。

private func requestMe(token: String) {
    let url = NSURL(string: "https://api.soundcloud.com/me.json?oauth_token=(token)")!
    let request = NSURLRequest(URL: url)
    let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration(),
                               delegate: nil, delegateQueue: NSOperationQueue.mainQueue())
    let dataTask = session.dataTaskWithURL(url) { (data, response, error) -> Void in
        if let jsonOutput = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: nil) as? [String:AnyObject] {
            self.displayMe(jsonOutput)
        }
    }
    dataTask.resume()
}

然而,当编译时,我的错误处理看起来好像在这个版本的Swift(2.0)中发生了变化,并导致以下错误:

编译时调用的额外参数'error'。

我已经查看了以下关于这个问题的堆栈帖子:Swift: Extra argument 'error'在调用

并调整了我的代码,以尝试纠正错误处理如下:

let dataTask = session.dataTaskWithURL(url) { (data, response, error) -> Void in
        if let jsonOutput = NSJSONSerialization.JSONObjectWithData(data, options: nil) as? [String:AnyObject] {
            self.displayMe(jsonOutput)
        }
    }
    catch let error as NSError {
        print(error);}
    dataTask.resume()
}

我也试过修改:

(data, options: nil, error: nil)

(data:NSData?, error:NSError?)

然而,这些都不能解决问题。有没有人能告诉我,我在处理这个错误时可能犯了一个愚蠢的错误。

提前感谢!

您的代码有几个问题:您添加了catch,但忘记了dotry。此外,你不能再传递nil作为NSJSONSerialization的选项参数,你必须安全地打开data可选。

这里有一个固定的版本:

let dataTask = session.dataTaskWithURL(url) { (data, response, error) -> Void in
    do {
        if let myData = data, let jsonOutput = try NSJSONSerialization.JSONObjectWithData(myData, options: []) as? [String:AnyObject] {
            self.displayMe(jsonOutput)
        }
    } catch let error as NSError {
        print(error)
    }
}
dataTask.resume()

最新更新