在 Swift 2.2 中追加数组时对 'subscript' 的使用不明确

Ambiguous use of 'subscript' while appending array in Swift 2.2

我不得不花几个月的时间来编码,我正在努力让我的应用程序保持最新。在 Xcode 7.3 中打开这个项目后,我在这一行收到 "Ambiguous use of 'subscript'" 错误:

words.append(storedWords[i] as! String)

完整声明在这里:

@if let storedWords : AnyObject = NSUserDefaults.standardUserDefaults().objectForKey("customWords") {
        words = []
        for var i = 0; i < storedWords.count; ++i {
            words.append(storedWords[i] as! String)
        }
    }

我看到过一些类似的问题,但处理的都是相似的。但情况不同。我已尝试采纳其中的许多建议,但没有看到直接应用到此代码。如果我错了,请指出正确的方向。

此代码在更新之前都运行良好,我确信它是由于 Swift 2.2 而进行的简单语法调整,但到目前为止没有任何效果。

谢谢。

这似乎是由于使用了 AnyObject。你可能想使用

if let storedWords = NSUserDefaults.standardUserDefaults().objectForKey("customWords") as? [String] {
    words = [String]()
    for word in storedWords {
        words.append(word)
    }
}

因此将存储的单词作为字符串数组从用户默认值中提取出来,并在知道它们必须都是字符串的情况下安全地迭代它们。

但是,如果这就是您要做的全部,您可以大大简化为:

let words = NSUserDefaults.standardUserDefaults().objectForKey("customWords") as? [String] ?? []

这会将 words 设置为字符串数组(如果存在),否则为空数组,无需迭代即可将所有元素添加到新数组。

我已经将你的代码更新到最新的 Xcode 7.3

var words = Array<AnyObject>()

    if let storedWords : AnyObject = NSUserDefaults.standardUserDefaults().objectForKey("customWords") {

        words = []

        for i in 0 ..< storedWords.count {

            words.append(storedWords[i] as! String)
        }
    }