从Swift中的void-func提前返回?

d.f*_*ber 13 swift

有人能解释一下Swift中的以下行为吗?

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()
Run Code Online (Sandbox Code Playgroud)

收益:

1 before return
2 before return
2 after return
Run Code Online (Sandbox Code Playgroud)

我希望print("2 after return")永远不会执行,因为它是在一个return声明之后.

有什么我想念的吗?

(使用Swift 4/4.1和Xcode 9.2/Xcode 9.3 beta 2测试)

use*_*240 12

这是一个棘手的事情,Swift不需要分号(它们可选地使用),这使得Swift编译器自动推断出下一行应该是新行还是旧行完成.print()是一个返回void的函数.所以这个词return print("something")是有效的.所以

return
print("Something")
Run Code Online (Sandbox Code Playgroud)

可以推断为 return print("Something")

你的解决方案是写

return;
print("Something")
Run Code Online (Sandbox Code Playgroud)