2016-01-20 87 views
-2

我试图使用显示在标签的动态更新的数组:“无法下标类型的值‘[字符串]’与类型的索引‘字符串’

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

但是我得到的错误

不能与类型的索引“字符串”下标型“[字符串]”的值。

任何想法,我怎么能解决这个问题?

+1

什么是结果? – matt

+1

'result.joinWithSeparator(“\ n”)' –

+0

是'i'字符串类型吗? – Breek

回答

2

注意,使用循环“头” for X in Y的时候,你没有得到指数Y,但实际元素Y。从你的错误判断,results是一串字符串([String])。因此,在你for循环中表示---一个接一个--- String数组中的元素results

所以,如果你想通过一个访问字符串元素一个在for循环上面,你可以用你的榜样的办法:

let result = ["Hello", "World"] 
for myString in result { 
    // use each string element in some manner... 
} 

然而,当您使用的是array方法joinWithSeparator(..),你应该使用,就像狮子在他的评论中直接写入上方,这个方法阵列上(而不是他们的元素!)

let result = ["Hello", "World"] 
outputLbl.text = result.joinWithSeparator("\n") 
/* Hello\nWorld */ 
-2

这是怎么回事是编译器推断iString,因为那是result。你的命名规则应该更加详细。

for specificString in result { 
    outputLbl1.text += "\n\(specifcString)" 
} 

EDITED的正确性。

+1

?????字符串没有joinWithSeparator方法。顺便说一句,我没有downvote –

+0

你是对的,我改变了,道歉。 – pbush25

+0

结果似乎是'[String]',而不是'String'更不用说'+ = + ='可能不会做任何有用的事情,甚至编译。 –

0

您收到此错误的原因如下:

似乎你混淆的i类型。变量result的类型为[String],这意味着它是一个String类型的数组。由于是一个数组,它必须使用Int而不是String作为下标。所以像result[0]result[12]是有效的,但类似result["hello"]是无效的。变量i这里是String,因为它是String类型的数组中的单个元素,这意味着有效地,通过说result[i]所做的尝试是沿着result["hello"]行的。

之前已经说过,对于您的问题的真正解决方案是,方法joinWithSeparator(_:String)不是String方法,而是Sequence类型的方法。这意味着它应该被称为Sequence,就像[String]类型的对象。所以,你应该用的是:

outputLbl.text = result.joinWithSeparator("\n") 
1

我觉得你在这里做什么是试图通过字符串数组迭代,然后更新一个标签,在这种情况下“outputLbl”。在这里,你可以做这样的事情

for i in result { 
    //result is array of strings. 
    // here i is individual element of result array 
    /* outputLbl.text = result[i].joinWithSeparator(“\n”)*/ 
    //instead you can write 
    outputLbl.text = i.joinWithSeparator(“\n”) 
    } 
相关问题