在 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)
}
}
我不得不花几个月的时间来编码,我正在努力让我的应用程序保持最新。在 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)
}
}