此代码有效,
let people = ["Tom","Dick","Harry"]
但是这个代码无法正常工作
let people = []
并且这也不是(可变性不重要):
var people = []
错误是“无法将表达式的类型数组转换为类型'ArrayLiteralConvertible'”,但这对我来说没有任何意义,none other的questions显示在搜索解决了这个问题。
起初我认为它与类型推断有关,但事实证明这不是问题(至少不是那么简单!)因为虽然这有效(指定类型)
var people:Array = [""]
这不是(上面指定的类型,但在Array中没有给出String):
var people:Array = []
由于这两个中的最后一个具有显式指定的类型,因此它不需要在Array内传递的字符串。
有些语言(奇怪!)考虑变量的类型来引用数组 项的类型,所以我也尝试指定String
而不是Array
,但得到了相同的结果。第一个工作,第二个不工作:
var people:String = [""]
var people:String = []
答案 0 :(得分:10)
您正在寻找的语法是
let people : [String] = []
或
let people = [String]()
在这两种情况下,您都可以将[String]
替换为Array<String>
对于此代码
let people = []
编译器无法确定people
的类型。你期望它有什么类型?
注意Array
不是完整类型,因为它需要通用部分。完整类型类似于Array<String>
答案 1 :(得分:2)
你可以这样做
let blankArray = [String]()
或您需要的任何其他类型。