2015-09-27 64 views
1

编译错误,目前我正在试图通过此示例应用程序,以了解雨燕2.0和OAuth整合:https://github.com/soundcloud/iOSOAuthDemo调用中的额外参数'错误'。在雨燕2.0

下面的下面的片段引起了我的问题,导致应用程序在编译失败。

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() 
} 

但是编译我的错误处理时,看起来好像在这个版本斯威夫特(2.0)的改变,并导致以下错误:

Extra argument 'error' in call with the compilation.

我已经审查了这下面的堆栈发布问题:Swift: Extra argument 'error' in call

和调整我的代码,试图纠正错误处理这样的:

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?) 

然而这些都不解决问题。有人可以指导我,这个错误处理可能是一个愚蠢的错误。

在此先感谢!

回答

3

存在一些问题与您的代码:您添加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() 
+0

感谢您了埃里克·d! – user4657

+0

不客气。 :) – Moritz