Reputation: 682
I have a variable
var savedSearchItems: [String] {
get {
return UserDefaults.standard.stringArray(forKey: keySavedSearchItems) ?? []
}
set {
UserDefaults.standard.setValue(savedSearchItems, forKeyPath: keySavedSearchItems)
}
}
Is this a correct way to update my array?
case .saveSearchItem(let item):
var temp = st.savedSearchItems
print(temp) //always prints "[]"
temp.append(item)
st.savedSearchItems = temp
Upvotes: 0
Views: 196
Reputation: 285290
The setter in your method causes an inifinite loop. The correct syntax is
var savedSearchItems: [String] {
get {
return UserDefaults.standard.stringArray(forKey: keySavedSearchItems) ?? []
}
set {
UserDefaults.standard.set(newValue, forKey: keySavedSearchItems)
}
}
Never use setValue:forKey(Path)
with UserDefaults
Upvotes: 2