zoukankan      html  css  js  c++  java
  • Swift异常处理:throw和rethrow

    Swift异常处理体现了函数式语言的特性。因此我们能够传一个会抛出异常的函数闭包(高阶函数)作为參数传到还有一个函数中(父函数),父函数能够在子函数抛出异常时直接向上抛出异常,这时用rethrowkeyword表示引用闭包时抛出的异常。
    throwkeyword和Java一样,就是说调用这个函数本身可能会抛出异常。
    rethrow能够看作是throw的子集,Swift不把rethrow作为完整的类型。

    比如一个函数不能同一时候用throw和rethrow抛出异常,高阶函数闭包定义中也不能包括rethrow。

    rethrow更像函数的属性(相似@noreturn)。rethrow仅仅是在函数作为參数调用的上下文中才有意义。就是为了简化语法的。

    一个接受闭包作为參数的函数有以下三种throw选择

    1、throw异常,这表示这个函数可能会抛出异常。不管作为參数的闭包是否抛出异常
    2、rethrow异常,这表示这个函数本身不会抛出异常,但假设作为參数的闭包抛出了异常。那么它会把异常继续抛上去。比如
    func map<T>(@noescape transform: (Generator.Element) throws -> T) rethrows -> [T]
    

    3、不抛出异常,这表示这个函数会处理參数闭包的异常,或者不正确闭包进行运算。


    当我们使用Swift异常处理时,应该不觉得它是抛出异常。而是返回不同的类型



  • 相关阅读:
    java security
    java 反射 动态代理
    java 泛型
    angularjs编码实践
    angularjs 资源集合
    java 类的加载,链接,初始化
    java 伪共享
    java cpu缓存
    SpringMVC,Controller的返回页面类型以及路径设置默认值
    org.springframework.web.bind.annotation重定向的问题
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7277966.html
Copyright © 2011-2022 走看看