【问题标题】:Ambiguous reference to member 'subscript' in wordEquiv[i]wordEquiv[i] 中对成员“下标”的模糊引用
【发布时间】:2017-09-06 10:58:44
【问题描述】:
var number : UInt16 = 20_168
var numberString : String = String(number)
var wordEquiv  = [ "1": "One", "2": "Two", "3": "Three" , "4": "Four" ,  "5": "Five", "6": "Six", "7": "Seven", "8": "Eight", "9": "Nine"]
for i in numberString.characters {
    print("\(i) - \(wordEquiv[i]!)")
}

当我尝试打印 wordEquiv[key] 时,它似乎工作正常。但是当我尝试在循环中使用它时,它会显示一个错误,如何解决这个问题?因为我试图将与 numberString 等效的每个字符显示为单词。

【问题讨论】:

  • 如果您需要通过使用索引来迭代集合,那么您实际上并不想要一个键是索引的字典:您需要一个数组。

标签: arrays swift loops


【解决方案1】:

这是因为字符和String 是不同的类型。由于您的 wordEquiv 字典采用 String,因此添加适当的转换:

print("\(i) - \(wordEquiv[String(i)]!)")

或者,您可以将字典从字符“映射”到 String,并避免转换。

注意:您的代码将在打印 0 时中断,因为字典不包含它的描述。

【讨论】:

    【解决方案2】:

    使用此代码 -

    let number : UInt16 = 20_168
    var numberString : String = String(number)
    var wordEquiv  = [ "1": "One", "2": "Two", "3": "Three" , "4": "Four" ,  "5": "Five", "6": "Six", "7": "Seven", "8": "Eight", "9": "Nine"]
    for i in numberString.characters {
        let string = String(i)
        if let word = wordEquiv[string] {
            print("\(i) - \(wordEquiv[string]!)")
        }
    }
    

    【讨论】:

    • 删除了一个崩溃,请立即检查。
    【解决方案3】:

    好的,我修复了它,我发现不兼容的键类型是错误,我尝试将一种字符类型作为键而不是字符串放在 for 循环中。 这是正确答案

    var number : UInt16 = 20_168
    var numberString : String = String(number)
    var wordEquiv : [Character : String]  = ["0": "Zero", "1": "One", "2": "Two", "3": "Three" , "4": "Four" ,  "5": "Five", "6": "Six", "7": "Seven", "8": "Eight", "9": "Nine"]
    for i in numberString.characters {
    
        print("\(i) - \(wordEquiv[i]!)")
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多