Tak więc wypróbowałem obsługę błędów w szybkim 2. Ale jedną rzeczą, której nie jestem pewien, jest to, jak sprawić, by działała asynchroniczne funkcje wywołania zwrotnego. Załóżmy, że ładuję zasób z zaplecza. Mój typ błędu zdefiniowałem tak:Asynchroniczna obsługa błędów w swift 2
enum NetworkError: ErrorType {
case NoConnection
case InvalidJSON
case NoSuccessCode(code: Int)
}
Mam zamiar rzucić jeden z tych przypadków, gdy coś jest nie tak. Oto funkcja, która sprawia, że połączenia sieciowe:
func loadRequest<T: Decodable>(request: NSURLRequest, callback:T -> Void) throws {
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request) { data, response, error in
// Other code that parses json and at somewhere it throws
throw NetworkError.NoConnection
}
}
Ale tu kompilator daje błąd:
Cannot invoke
dataTaskWithRequest
with an argument list of type(NSURLRequest, (_,_,_) throws) -> Void)
Stąd oczywiste jest, że ten sam typ zamknięcia jest uważany za innego rodzaju, gdy jest ona zadeklarowana z throws
.
Jak to działa w takich sytuacjach?