我尝试使用以下方法在标签中显示动态更新的数组:
for i in result {
outputLbl.text = result[i].joinWithSeparator("\n")
}
但是我收到了错误
无法下标类型' [String]'索引类型为' String'。
知道如何解决这个问题吗?
答案 0 :(得分:2)
请注意,使用循环"标题" for X in Y
,您不能获得Y
的索引,而是Y
的实际元素。从您的错误来看,results
是一个字符串数组([String]
)。因此,循环中的i
代表---逐个--- String
数组results
中的元素。
所以, if 你想在上面的for循环中逐个访问字符串元素,你可以使用你的例子中的方法:
let result = ["Hello", "World"]
for myString in result {
// use each string element in some manner...
}
但是,当您使用array
方法joinWithSeparator(..)
时,您应该像Leo在上面的评论中一样,直接在您的数组上使用此方法(而不是它们的元素!)
let result = ["Hello", "World"]
outputLbl.text = result.joinWithSeparator("\n")
/* Hello\nWorld */
答案 1 :(得分:0)
您收到此错误的原因如下:
您似乎对i
的类型感到困惑。变量result
的类型为[String]
,这意味着它是String
类型的数组。由于是一个数组,它必须使用Int
下标,而不是String
。因此result[0]
或result[12]
之类的内容有效,但result["hello"]
之类的内容无效。这里的变量i
是String
,因为它是String
类型数组中的单个元素,这意味着您有效地通过说{{{I}来尝试做什么1}}是result[i]
。
有人说过,问题的真正解决方案是方法result["hello"]
不是joinWithSeparator(_:String)
方法,而是String
类型方法。这意味着它应该在Sequence
上调用,就像Sequence
类型的对象一样。所以你应该使用的是:
[String]
答案 2 :(得分:-2)
这里发生的是编译器推断i
属于String
类型,因为result
是什么。您的命名约定应该更加详细。
for specificString in result {
outputLbl1.text += "\n\(specifcString)"
}
为了正确而编辑。