2015-10-26 112 views
4

我想要做的是將firstCard的圖像設置爲與名稱對應於firstCardString的圖像文件相同。無法轉換類型'[String]?'的值到期望的參數類型「字符串」

例如,在下面的情況下,代碼可以設置self.firstCard.image以顯示名爲「card1」的圖像,如果它隨機選取它(爲了簡潔,我已經剪切了數組的其餘部分,完整的東西包含52個對象)。

var deckArray = [ 
     "card1": ["Bear","Ball"], 
     "card2": ["Bear","Ball"], 
     "card3": ["Bear","Ball"], 
     "card4": ["Bear","Ball"], 
     "card5": ["Bear","Ball"], 
     "card6": ["Bear","Ball"], 
     "card7": ["Bear","Ball"], 
] 

    let firstRandomNumber = Int(arc4random_uniform(52))+1 
    let firstCardString = deckArray["card\(firstRandomNumber)"] 
    self.firstCard.image = UIImage(named: firstCardString) 

相反,我發現了以下錯誤:

Cannot convert value of type '[String]?' to expected argument type 'String'

我不完全知道這是什麼錯誤消息意味着,什麼是[String]?

回答

6

[]是一個數組,?是可選的。您的firstCardString根本不是字符串,而是可選的字符串數組。你已經閱讀了deckArray字典的值,你看,所以你的firstCardString實際上看起來像這樣:Optional(["Bear", "Ball"])。我想你的意思是:

self.firstCard.image = UIImage(named: "card\(firstRandomNumber)") 

這將基於像"card1""card4"字符串設定的圖像。我想你以後會用你的字典來做其他事情。當你這樣做時,一定要解開它返回可選值:

if let cardArray = deckArray["card\(firstRandomNumber)"] { 
    //do something with bears and balls 
} 

另外,考慮做deckArray數組(這將使名稱更合理),而不是一本字典。然後,你將不必應付自選,並能夠訪問項目如下:

let cardArray = deckArray[firstRandomNumber] 
//do something with bears and balls 
+0

但是,如果使用'self.firstCard.image =的UIImage(命名爲:「卡\(firstRandomNumber)」)',不就是企圖firstCard設置是隻之間的隨機數的圖像名稱1和52,而不是將其設置爲與該索引號相對應的鍵(「card4」)? – TheDudeGuy

+1

圖像名稱將爲「card1」或「card3」或「card5」。請在名稱中看到「卡」字樣?緊接着是'\(firstRandomNumber)',它將在「card」一詞後面插入數字。 – andyvn22

+0

@ andyvn22請回答相同的相關問題在這裏http://stackoverflow.com/questions/42733225/cannot-convert-the-value-of-type-string-to-expected-argument-type-string –

0

好像deckArray其實,字符串數組的字典。因此,如果firstRandomNumber = 1,deckArray["card\(firstRandomNumber)"]將返回["Bear","Ball"]。這絕對不是一個字符串!

+0

請回答相似相關的問題在這裏http://stackoverflow.com/questions/42733225/cannot-convert-the-value-of-type-string-to-expected-argument-type-string –

0

您的deckArray是一個字典,並且您的第一個卡片串是一個數組。

String = String 

[String] = Array of strings. 
+0

請在這裏回答類似的相關問題http:// stackoverflow.com/questions/42733225/cannot-convert-the-value-of-type-string-to-expected-argument-type-string –

相關問題