2016-04-17 4 views
4

Моя функция:Как выбросить ошибку в закрытии?

func post(params: AnyObject, completion: (response : AnyObject) -> Void) { 


} 

, но мне нужно что-то вроде метания ошибки внутри блока завершения

func post(params: AnyObject, completion: (response : **throws ->** AnyObject) -> Void) { 


} 

так, что я могу ошибки ручки внутри самого блока.

ответ

2

Это небольшой пример, как можно выбросить ошибку при закрытии.

Сначала настроить перечисление ошибок:

enum TestError : ErrorType { 
    case EmptyName 
    case EmptyEmail 
} 

чем Youre функция должна бросить ошибки:

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 
} 

чем создать блок для вызова его:

func asynchronousWork(completion: (inner:() throws -> TestError) -> Void) -> Void { 
    do { 
     try loginUserWithUsername("test", email: "") 
    } catch let error { 
     completion(inner: {throw error}) 
    } 
} 

ошибки Берите это нравится:

asynchronousWork { (inner:() throws -> TestError) -> Void in 
    do { 
     let result = try inner() 
    } catch TestError.EmptyName { 
     print("empty name") 
    } catch TestError.EmptyEmail { 
     print("empty email") 
    } catch { 
     print(error) 
    } 
} 

В случае, если вы хотели бы использовать rethrows этого примера кода был взят из этого link:

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 { 
} 
+0

мы не можем обрабатывать ошибки без внутренних блоков? –

+2

вы можете использовать rethrows для этого –

 Смежные вопросы

  • Нет связанных вопросов^_^