Reputation: 89
I had to take a few months away from coding and I'm trying to get my apps up to date. After opening this project in Xcode 7.3 I am getting the "Ambiguous use of 'subscript'" error on this line:
words.append(storedWords[i] as! String)
The whole statement is here:
@if let storedWords : AnyObject = NSUserDefaults.standardUserDefaults().objectForKey("customWords") {
words = []
for var i = 0; i < storedWords.count; ++i {
words.append(storedWords[i] as! String)
}
}
I have seen a few similar questions but the are dealing similar. but different situations. I have tried adapting many of those suggestions, but don't see a direct application to this code. If I am wrong, please point me in the right direction.
This code all worked perfectly before the update and I'm sure its a simple syntax adjustment due to Swift 2.2, but so far nothing has worked.
Thank you.
Upvotes: 0
Views: 200
Reputation: 107
I have updated your code into latest 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)
}
}
Upvotes: 0
Reputation: 4905
This appears to be due to the use of AnyObject
. You probably want to use
if let storedWords = NSUserDefaults.standardUserDefaults().objectForKey("customWords") as? [String] {
words = [String]()
for word in storedWords {
words.append(word)
}
}
Thus pulling the stored words out of user defaults as an array of strings and iterating over them safely knowing that they must all be strings.
However if this is all you are doing, you can simplify greatly to:
let words = NSUserDefaults.standardUserDefaults().objectForKey("customWords") as? [String] ?? []
Which will set words
to the array of strings if they exist, otherwise an empty array, no need to iterate just to add all the elements to a new array.
Upvotes: 0