"不能下标类型的值' [String]'索引类型'字符串'

时间:2016-01-20 18:48:26

标签: ios swift

我尝试使用以下方法在标签中显示动态更新的数组:

for i in result {
    outputLbl.text = result[i].joinWithSeparator("\n")
} 

但是我收到了错误

  

无法下标类型' [String]'索引类型为' String'。

知道如何解决这个问题吗?

3 个答案:

答案 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"]之类的内容无效。这里的变量iString,因为它是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)"
}

为了正确而编辑。