美文网首页
Swift @autoclosure

Swift @autoclosure

作者: AryCode | 来源:发表于2018-10-25 11:42 被阅读3次

    使用@autoclosure可以使得该参数结果延迟获取,在获取复杂数据结果作为参数时有优化的作用

    1. 使用@autoclosure
    func findGreatThan100_autoclosure(parm1: Int,parm2: @autoclosure () -> Int) -> Int {
        print("findGreatThan100_autoclosure_fun_invoking")
        if parm1 > 100 {
            return parm1
        }
        return parm2()
    }
    
    func method() -> Int{
        print("method_fun_invoking")
        return 101
    }
    
    let result = findGreatThan100_autoclosure(parm1: 10, parm2: method())
    
    

    结果

        print("findGreatThan100_autoclosure_fun_invoking")
        print("method_fun_invoking")
    
    1. 不使用@autoclosure
    func findGreatThan100_noautoclosure(parm1: Int,parm2: Int) -> Int {
        print("findGreatThan100_noautoclosure")
        if parm1 > 100 {
            return parm1
        }
        return parm2
    }
    
    func method() -> Int{
        print("method_fun_invoking")
        return 101
    }
    
    let result1 = findGreatThan100_noautoclosure(parm1: 10, parm2: method())
    

    结果

     print("method_fun_invoking")
     print("findGreatThan100_noautoclosure")
    

    在Swift中,|| 或运算符就是使用了这个关键字,使得只要有一个参数符合要求,后面参数不再进行计算,源码如下

    extension Bool {
      public static func || (lhs: Bool, rhs: @autoclosure () throws -> Bool) rethrows
          -> Bool {
        return lhs ? true : try rhs()
      }
    }
    

    相关文章

      网友评论

          本文标题:Swift @autoclosure

          本文链接:https://www.haomeiwen.com/subject/muuqtqtx.html