2015-01-05 13 views
10

w Objective C następującą składnię było możliwe:Swift NSURLConnection sendSynchronousRequest

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

Teraz w Swift Użyłem:

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

który działa, ale nie może uzyskać dostępu StatusCode więcej, ponieważ jeśli mogę użyć NSHTTPURLResponse zwraca błąd, który jest potrzebny NSURLResponse!

Czy znasz jakiś sposób, aby rozwiązać ten problem?

+0

Oczywiście, mam nadzieję, że nigdy nie używasz 'sendSynchronousRequest' od głównego wątku. Zawsze wolelibyśmy żądanie asynchroniczne (szczególnie anulowane). – Rob

Odpowiedz

25

Zamiast ręcznego tworzenia AutoreleasingUnsafeMutablePointer, można po prostu użyć & zawinąć wartość, którą chcesz wysłać wskaźnik do - kod staje się znacznie prostsze:

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

Po zakończeniu rozmowy, musisz oddać swój odpowiedź na NSHTTPURLResponse dostęp do tych właściwości:

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

Działa idealnie. Dziękuję Ci! – user3573256

+1

@Rob Dzięki, naprawione. –

Powiązane problemy