2015-06-11 24 views
6

Obecnie przepisuję części kodu Swift 1.2 pod kątem zgodności ze Swift 2.0. Właściwie nie mogę dowiedzieć się, jakie zmiany są wprowadzane do „sendAsynchronousRequest” - obecnie wszystkie moje prośby nieNie można wywołać "sendAsynchronousRequest" w Swift 2 z listą argumentów

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

nie może powoływać „sendAsynchronousRequest” z listy argumentów typu „(NSURLRequest, kolejka: NSOperationQueue, completionHandler: (NSURLResponse !, NSData !, NSError!) -> void)”

Czy masz jakiś pomysł co jest nie tak?

Odpowiedz

6

Z Swift 1.2 i Xcode 6.3, podpis sendAsynchronousRequest:queue:completionHandler: jest:

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

Z Swift 2 i Xcode 7 beta, jednak podpis sendAsynchronousRequest:queue:completionHandler: uległa zmianie i teraz:

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

w konsekwencji, zwracając się do Swift 2 i Xcode 7 beta, trzeba będzie zmienić completionHandler pa implementacja rameter i upewnij się, że Twój parametr queue nie jest opcjonalny.

4

Wygląda na to, że problem dotyczy niejawnych nieopakowanych opcji w bloku zakończenia. Po prostu zrób to opcjonalne i powinno działać dobrze,

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

Od NSURLConnection.sendAsynchronousRequest jest przestarzałe w iOS 9. W przypadku korzystania NSURLSessionpublic func dataTaskWithRequest(request: NSURLRequest, completionHandler: (NSData?, NSURLResponse?, NSError?) -> Void) -> NSURLSessionDataTask

0

Swift 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 

    } 
Powiązane problemy