Swift @autoclosure

使用@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)