无法转换'[String]类型的值?'预期参数类型'String'

时间:2015-10-26 22:20:49

标签: swift

我想要做的是将O(n)的图像设置为与图像文件相同,其名称对应于firstCard

例如,在下面的例子中,代码可能是设置firstCardString以显示名为“card1”的图像,如果它随机选择它(为了简洁我已经剪切了其余的数组,完整的东西包含52个对象)。

self.firstCard.image

相反,我收到以下错误:

  

无法转换'[String]类型的值?'预期的参数类型'String'

我不完全确定此错误消息的含义,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) 是什么?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

事实上,deckArray似乎是一个字符串数组的字典。因此,如果firstRandomNumber = 1deckArray["card\(firstRandomNumber)"]将返回["Bear","Ball"]。那绝对不是一个字符串!

答案 2 :(得分:0)

你的deckArray是一个字典,你的firstCardString是一个数组。

String = String

[String] = Array of strings.