swift知识小集

Swift return 陷阱, Swift return后还会

2020-05-12  本文已影响0人  小杰杰杰

我们来看下边一个例子:

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

上一篇 下一篇

猜你喜欢

热点阅读