Arrays 创建数组

Arrays 创建数组,arrays,swift,swift2,Arrays,Swift,Swift2,我即将学习Swift 2,并进入了关于数组的章节。在那里,我发现以下两种情况(至少在我看来)是一样的: 第一个: var shoppinglist = [String](arrayLiteral: "Eggs", "Milk"); 第二个: var shoppinglist2: [String] = ["Eggs", "Milk"]; 这两者到底有什么区别,或者根本没有区别?我应该选择哪一种?这只是语法上的甜点,可以让代码不那么冗长,一般来说,你应该选择不那么冗长的代码,除非出于某种原因不清

我即将学习Swift 2,并进入了关于数组的章节。在那里,我发现以下两种情况(至少在我看来)是一样的:

第一个:

var shoppinglist = [String](arrayLiteral: "Eggs", "Milk");
第二个:

var shoppinglist2: [String] = ["Eggs", "Milk"];

这两者到底有什么区别,或者根本没有区别?我应该选择哪一种?

这只是语法上的甜点,可以让代码不那么冗长,一般来说,你应该选择不那么冗长的代码,除非出于某种原因不清楚。也可以删除类型注释,因为它是冗余的,因为可以从表达式推断类型

因此,理想情况下:

var shoppinglist = ["Eggs", "Milk"]

让代码不那么冗长只是语法上的甜点,一般来说,您应该更喜欢不那么冗长的代码,除非出于某种原因不清楚。也可以删除类型注释,因为它是冗余的,因为可以从表达式推断类型

因此,理想情况下:

var shoppinglist = ["Eggs", "Milk"]

功能上没有区别,但您应该更喜欢第二个表达式

语法
[String]
只是
数组
的简写,表示您正在描述专门用于保存
字符串
值的泛型
数组
类型

然而,更常见和更可读的是,使用这种速记语法只是为了描述一个类型,而不是像在第一个示例中那样实际调用初始值设定项。另外,不需要调用接受
arrayLiteral
参数的初始值设定项。该参数的要点是允许您使用文本初始化数组,就像您在第二个示例中所做的那样

你的第二个例子很好

另一个选择就是

var shoppinglist3 = ["Eggs", "Milk"]
它依赖于类型推断


您不需要分号

没有功能上的区别,但是您应该更喜欢第二个表达式

语法
[String]
只是
数组
的简写,表示您正在描述专门用于保存
字符串
值的泛型
数组
类型

然而,更常见和更可读的是,使用这种速记语法只是为了描述一个类型,而不是像在第一个示例中那样实际调用初始值设定项。另外,不需要调用接受
arrayLiteral
参数的初始值设定项。该参数的要点是允许您使用文本初始化数组,就像您在第二个示例中所做的那样

你的第二个例子很好

另一个选择就是

var shoppinglist3 = ["Eggs", "Milk"]
它依赖于类型推断


您不需要分号,第二个更常见,在本例中,您还可以排除:[String],因为它是从右侧值推断出来的。它们有不同的语法,但计算结果是相同的。第一种方法通常用于创建空数组或重复数组,如下所示:

var empties = [Float]()
var doubles = [Double](count: 15, repeatedValue: 1.0)

第二个更常见,在本例中,您还可以排除:[String],因为它是从右侧值推断出来的。它们有不同的语法,但计算结果是相同的。第一种方法通常用于创建空数组或重复数组,如下所示:

var empties = [Float]()
var doubles = [Double](count: 15, repeatedValue: 1.0)

清楚了,谢谢!我会尽快接受这个答案。我可能会反驳。我们希望代码是冗长的,因为冗长通常使代码更清晰。但是数组文字是一种情况,在这种情况下,有一种简洁的替代方法,实际上更清晰。最终,我们希望得到最清晰的代码版本,但如果有疑问,请不要过于详细。清晰,谢谢!我会尽快接受这个答案。我可能会反驳。我们希望代码是冗长的,因为冗长通常使代码更清晰。但是数组文字是一种情况,在这种情况下,有一种简洁的替代方法,实际上更清晰。最终,我们希望得到最清晰的代码版本,但如果有疑问,请不要过于详细。谢谢您的解释!我使用分号,这样在用C编写代码时就不会忘记它们。谢谢+谢谢你的解释!我使用分号,这样在用C编写代码时就不会忘记它们。谢谢+谢谢你的解释+谢谢你的解释+1.