初始化字典和用Swift声明有什么区别?

初始化字典和用Swift声明有什么区别?,swift,Swift,不确定我的标题是否准确。请评论是否会更新 在一种方法中,我只是创建字典并用 在另一个示例中,我创建它并立即用键值对填充它 有什么区别?一个比另一个好吗 //initializing dictionary var airPortCodesInitialize = [Int: String]() //vs declaring var airPortCodes: [String: String] = ["SLC": "Salt Lake City", "LAX": "Los Angeles"] 在

不确定我的标题是否准确。请评论是否会更新

在一种方法中,我只是创建字典并用

在另一个示例中,我创建它并立即用键值对填充它

有什么区别?一个比另一个好吗

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

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

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

单个声明如下所示:

var myDictionary: [String: String]
我想你误解了什么是声明,所以对于这个答案的其余部分,我将比较上面的一行和你的第一行

有什么区别

单个声明不给变量任何值,因此,如果在声明后立即尝试使用myDictionary而不初始化它,编译器会给您一个错误:

print(myDictionary["Hello"]) // error
一个比另一个好吗

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

//vs declaring
var airPortCodes: [String: String] = ["SLC": "Salt Lake City", "LAX": "Los Angeles"]
大多数情况下,您应该像在中一样将初始化和声明放在同一行

var airPortCodesInitialize = [Int: String]()
这更具可读性

但有时,您可能需要根据值为常量字典设置不同的初始值。然后,您必须将声明和初始化分开:

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

它完全依赖于您的需求,但是没有区别,这是两种不同的语法,就像我们在其他编程语言中所做的那样,如ObjtC、C、C++。这两种形式都声明和初始化字典,一旦空,一次使用几个默认的键值对。旁注:一般来说,除非编译器告诉你,否则你不应该注释类型。简而言之,=左边的部分就是声明。=右边的部分是初始化。尽管使用Swift,您可以说从=右侧的类型推断可以被视为声明的一部分。回答很好,非常清楚,您帮助我找到了一个更好的方向。谢谢