几乎所有编程语言里都有简化的函数写法,c语言里是宏函数(#define),c++里是内联函数(inline,顺带一说,inline是内联的意思,在html里display里指定的inline也是内联的意思)
{ (a: Int, b: Int) -> Double in
if b==0 {
return 0.0
}
return Double(a)/Double(b)
}
然后提一下闭包的数据类型,上面这个例子的闭包类型是(Int, Int) -> Double
通用的说法是,(声明是的数据类型)->返回的数据类型,请看下面的例子
let c2 = { (a: Int, b: Int) -> Double in
if b==0 {
return 0.0
}
return Double(a)/Double(b)
}
if c2 is (Int, Int) -> Double {
print("c的类型是(Int, Int) -> Double")
}else {
print("c的类型我也不知道")
}
运行结果如下
c的类型是(Int, Int) -> Double
还要注意的是,闭包的参数不能带标签!但是,可以把带标签的函数带入闭包(闭包会忽视标签)
var funcTest: (String) -> String
func strTest(yourString str: String) -> String {
return "我是一个小测试"
}
print(strTest(yourString: ""))
funcTest = strTest
print(funcTest(""))
当然了,带可选类型的函数的闭包也是可以的,同时闭包也可以作为可选类型。同时,也可以对闭包类型定义型名
var optionalFunc: (Int?, Double?) -> String?
var optionalClosure: ((Double?) -> String?)?
typealias MyClosure = (Double) -> Int
typealias MyOplCls = MyClosure?