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()
  }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,295评论 3 119
  • 今天是周六,我喜欢每周的这天,一个远离周一到周五这段令人稍显忙乱的快节奏生活:一个过满充实的周六后,还有一天闲...
    星溪阅读 221评论 0 0
  • 又到周未,心中是无比的轻松。 “去书店买书吧,两張购书卡马上到期了。”孩子说。稚嫩的脸上写满对书的期待。 “好来。...
    清风8833阅读 318评论 0 0
  • 从哪里说起呢。 噩梦。 我知道这只是一场梦,却免不了紧张。 按说这该是个噩梦,有丧尸出没的世界,我们挣扎求生。 但...
    卢城阅读 428评论 0 1
  • 越长大,越孤单。越大越不安! 小的时候干净的像张白纸, 小的时候清澈的像蔚蓝的天空, 小的时候明净的像一湖清水。 ...
    丷木水口十灬阅读 272评论 0 0

友情链接更多精彩内容