swift 关键字之 @autoclosure

496 阅读1分钟

我们从一个方法说起然后依次推断出@autoclosure到底方便到哪里 1.案例一:自己定义了一个如下方法,然后会在后边方法调用的时候一步步简化

func testMeth(_parem: () -> Bool) {
    if _parem() {
        print("码农晨仔")
    }
}
  • 方法调用1
testMeth { () -> Bool in
    return 5 > 2
}
  • 方法调用2
testMeth(_parem: { return 5 > 2 })

  • 方法调用3
testMeth(_parem: {5 > 2})
  • 方法调用4
testMeth{5 > 2}

2.案例二:

func testMeth1(_parem:@autoclosure() -> Bool) {
    if _parem() {
       print("码农晨仔")
    }
}

这时候@autoclosure关键字会自动将会把 5 > 2 这个表达式自动转换为 () -> Bool

  • 方法调用
testMeth1(_parem: 5 > 2)

总结:@autoclosure 做的事情就是把一句表达式自动地封装成一个闭包 (closure)。会自动的把 5 > 2 这个表达式自动转换为 ”() -> Bool“,而我们在调用的时候就可以很方便的使用简化版的方法调用使用它。最后还需要注意@autoclosure 并不支持带有输入参数的写法,也就是说只有形如 () -> T 的参数才能使用这个特性进行简化。