2015-01-05 12 views
10

In Objective C la seguente sintassi era possibile:Swift NSURLConnection sendSynchronousRequest

NSHTTPURLResponse *response = nil; 
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil]; 
if ([response statusCode] == 404) 
{ 
} 

Ora a Swift ho usato:

var response : AutoreleasingUnsafeMutablePointer<NSURLResponse?> = nil 
let urlData = NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: err) 

che funziona, ma non riesco più ad accedere statusCode, perché se io uso NSHTTPURLResponse restituisce un errore che NSURLResponse è necessario!

Conosci qualche modo per risolvere questo problema?

+0

Ovviamente, spero che non si è mai usando 'sendSynchronousRequest' dal thread principale. Si preferirebbe sempre una richiesta asincrona (specialmente una cancellabile). – Rob

risposta

25

Invece di creare manualmente un AutoreleasingUnsafeMutablePointer, si può semplicemente utilizzare & per avvolgere il valore che si desidera inviare un puntatore a - il codice diventa molto più semplice:

var response: NSURLResponse? 
var error: NSError? 
let urlData = NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: &error) 

Dopo la chiamata, è necessario lanciare la vostra risposta a NSHTTPURLResponse per accedere quelle proprietà:

if let httpResponse = response as? NSHTTPURLResponse { 
    println(httpResponse.statusCode) 
} 
+0

Funziona perfettamente. Grazie! – user3573256

+1

@Rob Grazie, risolto. –