“无法下标类型的值‘[字符串]’与类型的索引‘字符串’
我试图使用显示在标签的动态更新的数组:“无法下标类型的值‘[字符串]’与类型的索引‘字符串’
for i in result {
outputLbl.text = result[i].joinWithSeparator("\n")
}
但是我得到的错误
不能与类型的索引“字符串”下标型“[字符串]”的值。
任何想法,我怎么能解决这个问题?
注意,使用循环“头” 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 */
这是怎么回事是编译器推断i
为String
,因为那是result
。你的命名规则应该更加详细。
for specificString in result {
outputLbl1.text += "\n\(specifcString)"
}
EDITED的正确性。
?????字符串没有joinWithSeparator方法。顺便说一句,我没有downvote –
你是对的,我改变了,道歉。 – pbush25
结果似乎是'[String]',而不是'String'更不用说'+ = + ='可能不会做任何有用的事情,甚至编译。 –
您收到此错误的原因如下:
似乎你混淆的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")
我觉得你在这里做什么是试图通过字符串数组迭代,然后更新一个标签,在这种情况下“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”)
}
什么是结果? – matt
'result.joinWithSeparator(“\ n”)' –
是'i'字符串类型吗? – Breek