如何将新元素附加到Userdefaults(SwiftUI)中的数组
我想在Userdefaults中有一个字符串数组,我可以编辑它。这意味着我想将新项追加到此数组如何将新元素附加到Userdefaults(SwiftUI)中的数组,swift,swiftui,userdefaults,Swift,Swiftui,Userdefaults,我想在Userdefaults中有一个字符串数组,我可以编辑它。这意味着我想将新项追加到此数组 var defaults = UserDefaults.standard defaults.array(forKey: "myArray")?.append("NewElement") 但我得到了这个错误代码: 无法对不可变值使用mutating成员:函数调用返回不可变值 我怎么办?你需要更多的信息吗?谢谢你的时间 Boothosh您需要将函数的结果分配给变量
var defaults = UserDefaults.standard
defaults.array(forKey: "myArray")?.append("NewElement")
但我得到了这个错误代码:
无法对不可变值使用mutating成员:函数调用返回不可变值
我怎么办?你需要更多的信息吗?谢谢你的时间
Boothosh您需要将函数的结果分配给变量,然后才能修改它
if var array = defaults.array(forKey: "myArray") {
array.append("NewElement")
}
您可以保存或读取数组,但应在保存之前完成作业,然后才能在读取后开始使用或添加新数据 PS:我在show case中使用了SwiftUI,但是在UIKit中也可以使用saveData()和readData()函数
您可以扩展UserDefaults并使用getter和setter创建计算属性。这样,您就可以直接从磁盘访问阵列:
extension UserDefaults {
var myStringArray: [String] {
get { stringArray(forKey: "myStringArray") ?? [] }
set { set(newValue, forKey: "myStringArray") }
}
}
用法:
UserDefaults.standard.myStringArray.append("NewElement")
UserDefaults.standard.myStringArray // ["NewElement"]
UserDefaults
有一个特定的方法来检索字符串数组,名为stringArray(forKey:)
。如果var array=UserDefaults,则无需将元素从Any
映射到String
。standard.stringArray(forKey:“array”){
Btw casting也可以像?[String]一样工作array(forKey:“array”)
无需创建另一个对象。您只需使用if var
而不是if let
。检查我的第二条评论是的,我想保持if let规则不变。但完全同意您的意见。
func readData() {
if let unwrappedData = UserDefaults.standard.stringArray(forKey: "array") {
var array: [String] = unwrappedData
array.append("d")
print(array)
}
}
extension UserDefaults {
var myStringArray: [String] {
get { stringArray(forKey: "myStringArray") ?? [] }
set { set(newValue, forKey: "myStringArray") }
}
}
UserDefaults.standard.myStringArray.append("NewElement")
UserDefaults.standard.myStringArray // ["NewElement"]