为什么你不能在Swift中初始化一个空数组?

时间:2014-10-02 21:55:11

标签: swift

此代码有效,

let people = ["Tom","Dick","Harry"]

但是这个代码无法正常工作

let people = []

并且这也不是(可变性不重要):

var people = []

错误是“无法将表达式的类型数组转换为类型'ArrayLiteralConvertible'”,但这对我来说没有任何意义,none otherquestions显示在搜索解决了这个问题。

起初我认为它与类型推断有关,但事实证明这不是问题(至少不是那么简单!)因为虽然这有效(指定类型)

var people:Array = [""]

这不是(上面指定的类型,但在Array中没有给出String):

var people:Array = []

由于这两个中的最后一个具有显式指定的类型,因此它不需要在Array内传递的字符串。

有些语言(奇怪!)考虑变量的类型来引用数组 项的类型,所以我也尝试指定String而不是Array,但得到了相同的结果。第一个工作,第二个不工作:

var people:String = [""]
var people:String = []

2 个答案:

答案 0 :(得分:10)

您正在寻找的语法是

let people : [String] = []

let people = [String]()

在这两种情况下,您都可以将[String]替换为Array<String>

对于此代码

let people = []

编译器无法确定people的类型。你期望它有什么类型?

注意Array不是完整类型,因为它需要通用部分。完整类型类似于Array<String>

答案 1 :(得分:2)

你可以这样做

let blankArray = [String]()

或您需要的任何其他类型。