【问题标题】:Cannot convert value of type '[String]?' to expected argument type 'String'无法转换类型“[String]?”的值到预期的参数类型“字符串”
【发布时间】:2015-10-26 22:20:49
【问题描述】:

我要做的是将firstCard的图像设置为与名称对应于firstCardString的图像文件相等。

例如,在下面的例子中,代码可以设置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)

相反,我收到以下错误:

无法转换类型“[String]?”的值到预期的参数类型“字符串”

我不完全确定此错误消息的含义,[String]? 是什么?

【问题讨论】:

    标签: swift


    【解决方案1】:

    [] 是一个数组,? 是可选的。你的 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
    

    【讨论】:

    • 但是如果我使用self.firstCard.image = UIImage(named: "card\(firstRandomNumber)"),那不会尝试将 firstCard 设置为一个图像名称,它只是一个介于 1 和 52 之间的随机数,而不是将其设置为密钥(“card4” ) 对应于具有该数字的索引?
    • 图像名称将是“card1”或“card3”或“card5”。看到名字里的“卡”字了吗?后跟\(firstRandomNumber),会在“card”后面插入数字。
    • @andyvn22 请在此处回答相同的相关问题stackoverflow.com/questions/42733225/…
    【解决方案2】:

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

    String = String
    
    [String] = Array of strings.
    

    【讨论】:

    【解决方案3】:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-18
    • 2019-12-24
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    相关资源
    最近更新 更多