我注意到空元组()用于表示Swift中缺少值。例如,不返回任何内容的函数的签名是:
func zz(){
println("zz")
}
编译器也将接受上述函数的这个主体:
func zz(){
println("zap")
return () // returning () and returning nothing is the same thing!
}
定义此函数的等效方法是:
func zz() -> (){
println("zap")
return ()
}
甚至还有一个名为Void的类型(
)typealias Void = ()
因此,如果空元组在Swift中缺少值,那么它与nil的关系是什么?为什么我们需要两个概念?在()?
方面是无保护答案 0 :(得分:6)
nil
是一个特殊值,您可以将其指定给Optional
,表示可选的不具有值。 nil
并非真正没有价值,它是一个特殊价值,意味着没有适当的价值
()
表示没有返回(或传入),甚至不是可选的。没有回报价值,也没有回报价值。您不能将其分配给任何不同于返回值nil的内容。
情况类似于(在C中)
之间的差异void foo(void);
和
SomeType* bar(void);
如果后一个函数使用返回值NULL
来表示某种失败。即。
someVariable = foo(); // Illegal
someVariable = bar(); // Not illegal
if (someVariable != NULL) { ... }
答案 1 :(得分:1)
nil
缺少值,()
是一个包含0个元素的元组。在概念上与将nil
与空数组进行比较相同:空数组不存在值。
它们只是两种不同且无关的东西。
在游乐场试试这个:
var x: Int?
x = () // <== () is not convertible to Int
产生错误。