【发布时间】:2019-12-17 15:39:34
【问题描述】:
我们来看看这个函数:
func nothing(){
return
}
它不返回值,但我们可以编写return 语句 Swift 如何处理它? return 没有值返回 0 或任何值来处理这种情况,幕后会发生什么?
【问题讨论】:
-
正如@zneak 所说,它只是意味着“将控制权返回给调用者”。 (但是,在 Swift 中,没有返回值的函数具有
Void类型的隐式返回值。) -
“return 语句出现在函数或方法定义的主体中,并导致程序执行返回到调用函数或方法。程序在函数或方法调用之后的点继续执行。”摘自:Apple Inc. “Swift 编程语言 (Swift 2.2)。”电子书。 itun.es/de/jEUH0.l
-
“当return语句后面没有表达式时,它只能用于从不返回值的函数或方法返回(即当函数的返回类型或方法是 Void 或 ())。”摘自:Apple Inc. “Swift 编程语言 (Swift 2.2)。”电子书。 itun.es/de/jEUH0.l
-
@dfri:我用
swiftc -emit-assembly -O main.swift检查了@inline(never) func foo() { return () }生成的汇编代码。我不是汇编编程方面的专家,但据我所知,没有返回值放在堆栈或返回寄存器中。 -
@MartinR 我明白了,谢谢。有趣的是,空元组的
sizeof是0,而strideof是1(虽然strideof是严格正数,所以这可能没什么意义)。此外,我们可以创建例如存储的空元组数组(例如通过从函数调用返回来初始化),但这可能与非预期功能有关。由于类型()只能保存一个唯一值(()),因此可能不需要解析任何从函数捕获的()-returns,因为编译器可以推断出这些捕获的(单个唯一)返回值在编译时。