Swift3的闭包相关

  几乎所有编程语言里都有简化的函数写法,c语言里是宏函数(#define),c++里是内联函数(inline,顺带一说,inline是内联的意思,在html里display里指定的inline也是内联的意思)

 
  Swift的强大之处非常之多,在这一块也有很充分的体现。当然,在Swift里,类似的功能叫做闭包。
首先,看下闭包怎么定义。这一块因为博主也没看到什么大家都通用的习惯写法,就按自己的来了

{ (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?

 

posted @ 2017-04-07 07:03  懒虫哥哥  阅读(104)  评论(0编辑  收藏  举报