Swift中nil和()之间的区别

时间:2014-10-10 13:47:55

标签: swift tuples null

我注意到空元组()用于表示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的关系是什么?为什么我们需要两个概念?在()?

方面是无保护

2 个答案:

答案 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

产生错误。