2016-05-04 55 views
0

我試圖根據教程我在網上找到(https://www.raywenderlich.com/85528/user-accounts-ios-ruby-rails-swift#next_section)創建NSURLSession任務,我收到以下錯誤:雨燕1.2以SWIFT 2:無法將類型的價值預期參數類型

Cannot convert value of type '(NSData!, NSURLResponse!, NSError!) ->()' to expected argument type '(NSData?, NSURLResponse?, NSError?) -> Void

在這個代碼塊:

let task = session.dataTaskWithRequest(request) { (data: NSData!, response: NSURLResponse!, error: NSError!) in 

當問題屬於可以在這裏找到

func sendRequest(request: NSURLRequest, completion:(NSData!, NSError!) -> Void) ->() { 
// Create a NSURLSession task 
let session = NSURLSession.sharedSession() 
let task = session.dataTaskWithRequest(request) { (data: NSData!, response: NSURLResponse!, error: NSError!) in 
    if error != nil { 
    dispatch_async(dispatch_get_main_queue(), {() -> Void in 
     completion(data, error) 
    }) 

    return 
    } 

    dispatch_async(dispatch_get_main_queue(), {() -> Void in 
    if let httpResponse = response as? NSHTTPURLResponse { 
     if httpResponse.statusCode == 200 { 
     completion(data, nil) 
     } else { 
     var jsonerror:NSError? 
     if let errorDict = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments, error:&jsonerror) as? NSDictionary { 
      let responseError : NSError = NSError(domain: "HTTPHelperError", code: httpResponse.statusCode, userInfo: errorDict as? [NSObject : AnyObject]) 
      completion(data, responseError) 
     } 
     } 
    } 
    }) 
} 
功能

完整的代碼塊可以在這裏(https://codeshare.io/uJPcX)在用線或dataresponse時進一步下跌,你發現68

+1

嘗試改變'數據:NSData !,響應:NSURLResponse !,錯誤:NSError!'到'data:NSData ?,響應:NSURLResponse? ,錯誤:NSError?' – Fonix

+0

這個伎倆!謝謝@Fonix – noobdev

+0

沒問題:),你應該查看可選變量的工作方式,以充分理解它們之間的區別!和?在迅速,以後也使用任何這些參數可能需要一個!在他們之後(和一些空的檢查) – Fonix

回答

0

變化

data:NSData!, response: NSURLResponse!, error: NSError!

data: NSData?, response: NSURLResponse?, error: NSError?

可能必須寫爲data!來展開變量,但要小心,因爲如果變量是nil它會崩潰,所以你必須檢查它不是第一個

相關問題