2014-10-10 45 views
2

我注意到空元组()用于表示Swift中缺少值。例如,没有返回值的函数,签名是:Swift中nil和()之间的区别

func zz(){ 
    println("zz") 
} 

编译器也将接受该机构上面的功能:

func zz(){ 
    println("zap") 
    return() // returning() and returning nothing is the same thing! 
} 

定义这个功能将是一个等价方式:

func zz() ->(){ 
    println("zap") 
    return() 
} 

甚至还有一个typealias为()称为空:

typealias Void =() 

所以如果空元组在Swift中没有价值,它与nil的关系是什么?为什么我们需要这两个概念?在()方面无防守?

回答

6

nil是一个特殊值,您可以将其指定给Optional以表示可选项没有值。 nil并不是真的没有价值,它是一个特殊的值,意味着没有合适的价值

()意味着什么都没有返回(或传入),甚至没有可选的。没有回报价值,也没有回报价值。你不能把它赋值给任何不同于返回值nil的东西。

的情况类似于(在C)之间的差值

void foo(void); 

SomeType* bar(void); 

如果后者函数使用的NULL一个返回值以指示某种故障。即

someVariable = foo(); // Illegal 

someVariable = bar(); // Not illegal 
if (someVariable != NULL) { ... } 
1

nil缺少值,()是一个元素为0的元组。从概念上讲,与将nil与空数组进行比较相同:空数组不是缺少值。

他们只是2个不同和不相关的东西。

刚刚尝试这一点在操场:

var x: Int? 
x =() // <==() is not convertible to Int 

产生一个错误。