2015-06-11 9 views
6

Attualmente sto riscrivendo parti del mio codice Swift 1.2 per la compatibilità con Swift 2.0. In realtà io non riesco a capire quali cambiamenti sono fatti per "sendAsynchronousRequest" - Al momento tutte le mie richieste non riesconoImpossibile richiamare "sendAsynchronousRequest" in Swift 2 con un elenco di argomenti

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

non può invocare 'sendAsynchronousRequest' con una lista di argomenti di tipo '(NSURLRequest, coda: NSOperationQueue, completionHandler: (NSURLResponse !, NSData !, NSError!) -> void)'

avete idea di cosa è sbagliato?

risposta

6

Con Swift 1.2 e Xcode 6.3, la firma di sendAsynchronousRequest:queue:completionHandler: è:

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

Con Swift 2 e Xcode 7 beta, tuttavia, la firma di sendAsynchronousRequest:queue:completionHandler: è cambiato ed è ora:

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

di conseguenza, rivolgendosi a Swift 2 e Xcode 7 beta, si dovrà cambiare la vostra completionHandler pa implementazione di rameter e assicurarsi che il parametro queue non sia opzionale.

4

Sembra che il problema sia con gli opzionali impliciti non confezionati nel blocco di completamento. Basta rendere opzionale e dovrebbe funzionare bene,

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

Da NSURLConnection.sendAsynchronousRequest è obsoleto in IOS 9. Dovranno utilizzare NSURLSessionpublic func dataTaskWithRequest(request: NSURLRequest, completionHandler: (NSData?, NSURLResponse?, NSError?) -> Void) -> NSURLSessionDataTask

0

rapida 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 

    } 
Problemi correlati