0

我不得不花几个月的时间远离编码,我正在努力让我的应用程序保持最新。在 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,它是一个简单的语法调整,但到目前为止没有任何效果。

谢谢你。

4

2 回答 2

0

我已将您的代码更新为最新的 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)
        }
    }
于 2016-04-19T04:40:19.630 回答
0

这似乎是由于使用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为字符串数组,否则为空数组,无需迭代即可将所有元素添加到新数组中。

于 2016-04-18T20:10:01.883 回答