2015-06-11 85 views
6

我目前正在爲了與Swift 2.0兼容而重寫我的Swift 1.2代碼的一部分。事實上,我想不出有什麼改變以「sendAsynchronousRequest」 - 目前我所有的請求失敗無法用參數列表在Swift 2中調用'sendAsynchronousRequest'

NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in}) 

不能援引「sendAsynchronousRequest」與 類型的參數列表「(的NSURLRequest,隊列:NSOperationQueue,completionHandler: (NSURLResponse!,NSData!,NSError!) - > Void)'

你有什麼想法是什麼錯?

回答

6

與SWIFT 1.2的Xcode 6.3,中sendAsynchronousRequest:queue:completionHandler:的簽名是:

class func sendAsynchronousRequest(request: NSURLRequest, 
    queue: NSOperationQueue!, 
    completionHandler handler: (NSURLResponse!, NSData!, NSError!) -> Void) 

與SWIFT 2和Xcode的7測試版,但是,簽名sendAsynchronousRequest:queue:completionHandler:已經改變,現在是:

// Note the non optionals, optionals and implicitly unwrapped optionals differences 
class func sendAsynchronousRequest(request: NSURLRequest, 
    queue: NSOperationQueue, 
    completionHandler handler: (NSURLResponse?, NSData?, NSError?) -> Void) 

因此,轉向斯威夫特2和Xcode的7測試版,你將不得不改變你的completionHandler PA實現rameter並確保您的queue參數是非可選的。

4

看起來問題是你的隱式unwrapped選項在完成塊中。只是使它可選的,它應該做工精細,

NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) { (response: NSURLResponse?, data: NSData?, error: NSError?) in 
    let string = NSString(data: data!, encoding: NSISOLatin1StringEncoding) 
    print("Response \(string!)") 
} 
2

由於NSURLConnection.sendAsynchronousRequest在IOS 9.已棄用應該使用NSURLSessionpublic func dataTaskWithRequest(request: NSURLRequest, completionHandler: (NSData?, NSURLResponse?, NSError?) -> Void) -> NSURLSessionDataTask

0

迅速3

let url:URL? = URL(string:location) 
    if url == nil { 
     print("malformed url : \(location)") 
    } 

    NSURLConnection.sendAsynchronousRequest(URLRequest(url:url!), 
     queue: OperationQueue.main) 
    { (response: URLResponse?, data: Data?, error: Error?) -> Void in 

    } 
相關問題