我们从一个方法说起然后依次推断出
@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 的参数才能使用这个特性进行简化。