2016-01-20 86 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」) 
    } 
相關問題