2015-10-26 115 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 –

相关问题