2015-06-09 48 views
5

在Xcode 7 Beta中开始使用Swift 2后,出现错误cannot invoke。是什么导致了这个问题无法使用类型为'(NSMutableURLRequest,(_,_,_)throws - > _')的参数列表调用'dataTaskWithRequest'

我尝试通过以下两个问题弄清楚我的问题,但我仍然得到错误:Question 1Question 2

错误:

Cannot invoke 'dataTaskWithRequest' with an argument list of type '(NSMutableURLRequest, (_, _, _) throws -> _)'

完整代码

let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {data, response, error in 
      let json = try NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers) as? NSDictionary 

      if let parseJSON = json { 
       let resultValue:String = parseJSON["status"] as! String 

       if(resultValue=="Success"){ 

        //Store Confimed Account Detail Inside Core Data 
        try self.saveAccountDetail(userloginTextField!, confirmDataRetrieve: 0) 

        //Login is Successful 
        NSUserDefaults.standardUserDefaults().setBool(true, forKey: "isUserLoggedIn") 
        NSUserDefaults.standardUserDefaults().synchronize() 

        self.dismissViewControllerAnimated(true, completion: nil) 

       } 
      } 

     } 

回答

5

由于狮子座Dabus测试,在他的帮助我弄清楚,这是斯威夫特2的新功能,您在键入代码应该是这样到trytry!处理

NSJSONSerialization应该运行:(如果扔输入您的去除!

let json = try!NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary 
+0

从文档:有时你知道抛出函数或方法不会,实际上,在运行时抛出一个错误。在那些场合,你可以试试!在表达式之前禁用错误传播并将该调用包装在运行时断言中不会抛出错误。如果实际发生错误,您将收到运行时错误。 – Marcio

1

请试试这个:

let task = NSURLSession.sharedSession().dataTaskWithRequest(request, 
    completionHandler: { 
     (data, response, error) -> Void in 
     if let data = data { 
      println(data.length) 
      // you can use data here 
     } else if let error = error { 
      println(error.description) 
     } 
}) 
task!.resume() 

你可以用这一个

let task = NSURLSession.sharedSession().dataTaskWithRequest(
    NSURLRequest(URL: NSURL(string: "https://cdn.photographylife.com/wp-content/uploads/2014/06/Nikon-D810-Image-Sample-6.jpg")!), 
    completionHandler: { 
     (data, response, error) -> Void in 
     if let data = data { 
      println(data.length) 
      if let image = UIImage(data: data) { 
       println(image.description) 
      } 

     } else if let error = error { 
      println(error.description) 
     } 

}) 
task!.resume() 
+0

现在我得到的错误'额外的参数“completionHandler”在call' – Xrait

+0

我刚才测试 –

+1

现在我得到这个错误'无效的转换,从抛型的功能“(_,_,_)抛出 - >无效”到非抛出函数类型'(NSData?,NSURLResponse ?, NSError?) - > void# – Xrait

2

try更改为try!然后它将开始编译为标准。

相关问题