我想要做的是将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)
是什么?
答案 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 = 1
,deckArray["card\(firstRandomNumber)"]
将返回["Bear","Ball"]
。那绝对不是一个字符串!
答案 2 :(得分:0)
你的deckArray是一个字典,你的firstCardString是一个数组。
String = String
[String] = Array of strings.