Swift:为什么在创建空白数组时需要空括号?

时间:2017-06-29 20:34:23

标签: arrays swift initialization

为什么在定义空白数组后需要括号“()”?例如:

let emptyArray = [String]()

但是当你使用带有预定义值的数组时,它不需要它们吗?

let populatedArray = ["Hello", "question"]

2 个答案:

答案 0 :(得分:3)

您正在调用初始化程序,这类似于:

let object = MyObject()

let string = String()

它也可以写成

let array = Array<String>()

使用预定义值时,将根据数组项的类型推断类型。使用空数组时,没有项目,因此必须明确指定类型。

另一种方法是:

let array: [String] = []

let array = [] as [String]

答案 1 :(得分:1)

简单的答案(关于为什么不能这样做)是编译器需要能够将[String]区分为类型[String] as 。当您添加()时,它知道它的值。请记住,您可以定义变量类型,而无需使用var x: [String]实例化它。

将其作为一个更复杂的系统深入研究,请记住这两个示例都是Array<String>Array<String>()的替代品。这里对()的需求是因为对象实例化的工作原理。使用简写[String]表示法,它的工作原理相同。

解决你的最后一个例子,这当然可以双向争论。然而,它没有含糊不清(毫无疑问它指的是一个价值),并且在其他语言中这样做是先例。