为什么在定义空白数组后需要括号“()”?例如:
let emptyArray = [String]()
但是当你使用带有预定义值的数组时,它不需要它们吗?
let populatedArray = ["Hello", "question"]
答案 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]
表示法,它的工作原理相同。
解决你的最后一个例子,这当然可以双向争论。然而,它没有含糊不清(毫无疑问它指的是一个价值),并且在其他语言中这样做是先例。