自动闭包就是将一个非闭包形式的表达参数 自动转化为闭包的表达形式并且传给一个普通函数表达形式。
//声明一个数组
var nameArray = ["li","yuan","long","is"]
//函数声明 参数是一个普通闭包类型 (该闭包没有参数有返回值String类型)
func removeName(nameIndex:()->String){
//输出语句中,调用了自身参数即闭包,此时闭包才会被执行
print("nameArray first name is \(nameIndex())")
}
//函数调用。参数传入一个定义好的闭包 该闭包的功能是删除数组中第一个元素
removeName(nameIndex: {()->String in return nameArray.remove(at: 0)})
//removeName(nameIndex: {()->String in nameArray.remove(at: 0)})
//尾随闭包的写法
//removeName(){()->String in nameArray.remove(at: 0)}
//removeName(){nameArray.remove(at: 0)}
//上记输出是nameArray first name is li 因为 闭包在执行前 调用的输出语句因此数组中的元素未来的删除
//函数声明 参数是一个自动闭包
func removeNameAuto(nameIndex: @autoclosure ()->String){
print("auto ameArray first name is \(nameIndex())")
}
//函数调用并传入一个普通的表达式,因为是自动的闭包,会将该普通的表达式自动转化为闭包传入。
removeNameAuto(nameIndex: nameArray.rem