关于闭包省略返回类型的细节

在Swift里,对于函数而言,一个标准的声明是这样的

func func-name(arg-list) -> ret-type {

    statment

}

在参数的省略方面,省略就以为这没有参数,这个没有问题。但是如果我们把末尾的返回值的类型省略了会怎样?也就是像下面这个

func testIntFunc() {

    print(5)

}

 

在解释之前我们应该先知道,在Swift里()和Void是等价的。省略返回值类型也就相当于下面这两种写法

func testIntFunc() -> () { //返回()型,也就是不返回任何类型

    print(5)

}

 

func testIntFunc() -> Void //返回Void和()等价,也是不返回任何类型

    print(5)

 

}

 

由此可知,在函数声明里省略返回值类型就是不返回任何值

 

那么闭包呢?在闭包里返回值的类型也可以被省略,但是闭包里省略返回值类型不完全等于不返回值。

在闭包里省略返回值类型,如果只有一行代码,根据这一行代码返回值的情况来决定返回值类型。如果多行则相当于不返回值。请看例子

let testInt = { () in

    return 5

}

 

let testDouble = { () in

    return 5.0

}

 

let testString = { () in

    return "testString"

}

 

 

 

运行结果如下

5

5.0

 

testString

 

posted @ 2017-04-16 19:06  懒虫哥哥  阅读(211)  评论(0编辑  收藏  举报