模糊地使用'下标'同时在Swift 2.2中附加数组

时间:2016-04-18 20:07:28

标签: arrays swift for-loop nsuserdefaults swift2.2

我不得不花费几个月的时间来编写代码,并且我试图让我的应用程序保持最新状态。在Xcode 7.3中打开这个项目后,我得到了"模糊地使用'下标'"这一行出错:

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,但到目前为止没有任何工作。

谢谢。

2 个答案:

答案 0 :(得分: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设置为字符串数组(如果存在),否则为空数组,无需仅迭代以将所有元素添加到新数组中。

答案 1 :(得分: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)
        }
    }