Così ho tentato di gestire gli errori in swift 2. Ma una cosa di cui non sono sicuro è come farlo funzionare per le funzioni di callback asincrone. Supponiamo che sto caricando una risorsa dal back-end. Ho definito il mio tipo di errore come il seguente:Gestione degli errori asincroni in swift 2
enum NetworkError: ErrorType {
case NoConnection
case InvalidJSON
case NoSuccessCode(code: Int)
}
sto progettando di lanciare uno di questi casi, quando qualcosa di sbagliato. Ecco la funzione che fa la chiamata di rete:
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
}
}
Ma qui compilatore dà errore:
Cannot invoke
dataTaskWithRequest
with an argument list of type(NSURLRequest, (_,_,_) throws) -> Void)
Da qui è evidente che lo stesso tipo di chiusura è considerato come un tipo diverso quando viene dichiarato con throws
.
Quindi, come funziona questa cosa di fare-try-catch in queste situazioni?