我们来看下边一个例子:
func test() -> Bool {
print("1 before return")
return false
print("1 after return")
}
func test2() {
print("2 before return")
return
print("2 after return")
}
test()
test2()
输出:
1 before return
2 before return
2 after return
我们发现print("2 after return")
在 return
后边被执行了
这是因为Swift不需要分号(;
分号是可选的),这使Swift编译器可以自动推断下一行是换行还是旧行的补全。 print()是一个返回void的函数。 因此语句:return print(“ something”)
是有效的。
func test2() {
print("2 before return")
return
print("2 after return")
}
缺省了 返回类型 -> Void
实际上为:
func test2() -> Void {
print("2 before return")
return
print("2 after return")
}
所以
return
print("Something")
可以推导为:return print("Something")
最终:
func test2() -> Void {
print("2 before return")
return print("2 after return")
}
添加分号可以解决:
func test2() -> Void {
print("2 before return")
return;
print("2 after return")
}
如果在返回行后放置值类型,也会看到错误,你可以了解更多信息:
func test2() {
print("2 before return")
return
2
}
error: Unexpected non-void return value in void function
网友评论