Es ist kleines Beispiel, wie es möglich ist, einen Fehler in Schließung zu werfen.
Erste aufgebaut Fehler Enum:
enum TestError : ErrorType {
case EmptyName
case EmptyEmail
}
als youre Funktion Fehler werfen sollten:
func loginUserWithUsername(username: String?, email: String?) throws -> String {
guard let username = username where username.characters.count != 0 else {
throw TestError.EmptyName
}
guard let email = email where email.characters.count != 0 else {
throw TestError.EmptyEmail
}
return username
}
als Block schaffen es für den Aufruf:
func asynchronousWork(completion: (inner:() throws -> TestError) -> Void) -> Void {
do {
try loginUserWithUsername("test", email: "")
} catch let error {
completion(inner: {throw error})
}
}
Handle Fehler wie es:
Falls möchten Sie rethrows diesem Codebeispiel verwenden, wurde aus diesem link genommen:
enum NumberError:ErrorType {
case ExceededInt32Max
}
func functionWithCallback(callback:(Int) throws -> Int) rethrows {
try callback(Int(Int32.max)+1)
}
do {
try functionWithCallback({v in if v <= Int(Int32.max) { return v }; throw NumberError.ExceededInt32Max})
}
catch NumberError.ExceededInt32Max {
"Error: exceeds Int32 maximum"
}
catch {
}
können wir nicht Fehler ohne innere Blöcke behandeln? –
können Sie rethrows dafür verwenden –