2017-09-13 74 views
0

不知道我的标题是否准确。如果更新,请发表评论。初始化字典和在Swift中声明有什么区别?

在一种方法中我刚创建的字典,并用()

初始化它在其它I创建它,并立即用一个键值对填充它。

有什么区别?一个人比另一个人更喜欢吗?

//initializing dictionary 
var airPortCodesInitialize = [Int: String]() 

//vs declaring 
var airPortCodes: [String: String] = ["SLC": "Salt Lake City", "LAX": "Los Angeles"] 
+0

这完全取决于你的需求但是没有区别,这是两种不同的语法,就像我们在其他编程语言如目标C,C,C++都在做。 –

+2

这两种形式都声明**和**,一旦有空,就用一些默认键值对初始化字典。附注:通常你不应该注释类型,除非编译器告诉你这样做。 – vadian

+1

简而言之,'='左边的部分就是声明。 '='右边的部分是初始化。尽管使用Swift,你可以说''''右边的类型推断可以被认为是声明的一部分。 – rmaddy

回答

1

在这两种情况下,您都在声明一个字典并对其进行初始化。唯一的区别是第一行创建一个空字典,第二行创建一个填充了键值对的字典。

单一的声明如下所示:

var myDictionary: [String: String] 

我想你是误会是什么声明,所以对于这个答案的其余部分,我会比较上述线和您的第一道防线。

What is the difference?

一个单独的声明给人的变量没有价值,因此,如果您尝试使用myDictionary声明后,立即在初始化之前,编译器给你一个错误:

print(myDictionary["Hello"]) // error 

Is one prefered over the other?

大多数时间,你应该把初始化和声明放在同一行上,就像你在

var airPortCodesInitialize = [Int: String]() 

这更具可读性。

虽然有时您可能需要不同的初始值,以取决于值的恒定字典。然后,你必须单独的声明和初始化:

let myConstantDict: [String: String] 
switch something { 
case .foo: 
    myConstantDict = ... 
case .bar: 
    myConstantDict = ... 
} 
+0

很好的答案,很清楚,你帮助我指出了一个更好的方向。谢谢。 –

相关问题