如何将新元素附加到 Userdefaults (SwiftUI) 中的数组
How can I append an new Element to an Array in the Userdefaults (SwiftUI)
我想在 Userdefaults 中有一个字符串数组,我可以对其进行编辑。这意味着我想将新项目附加到此 Array.Here 是一些示例代码
var defaults = UserDefaults.standard
defaults.array(forKey: "myArray")?.append("NewElement")
但是我得到这个错误代码:
Cannot use mutating member on immutable value: function call returns immutable value
我该如何处理?你需要更多的信息?谢谢你的时间
布索什
您需要将函数的结果赋值给变量才能修改它
if var array = defaults.array(forKey: "myArray") {
array.append("NewElement")
}
你可以保存或读取一个数组,但你应该在保存之前完成你的工作,然后你可以在读取后开始使用或添加新数据。
PS:我使用 SwiftUI 作为展示案例,但是 saveData() 和 readData() 函数也可以在 UIKit 中使用。
import SwiftUI
struct ContentView: View {
var body: some View {
VStack(spacing: 20) {
Button("saveData") { saveData() }
Button("readData") { readData() }
}
.font(Font.body.weight(Font.Weight.bold))
}
}
func saveData() {
var array: [String] = [String]()
array.append("a")
array.append("b")
array.append("c")
UserDefaults.standard.set(array, forKey: "array")
print("saved!")
}
func readData() {
if let unwrappedData = UserDefaults.standard.stringArray(forKey: "array") {
var array: [String] = unwrappedData
array.append("d")
print(array)
}
}
您可以扩展 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 中有一个字符串数组,我可以对其进行编辑。这意味着我想将新项目附加到此 Array.Here 是一些示例代码
var defaults = UserDefaults.standard
defaults.array(forKey: "myArray")?.append("NewElement")
但是我得到这个错误代码:
Cannot use mutating member on immutable value: function call returns immutable value
我该如何处理?你需要更多的信息?谢谢你的时间 布索什
您需要将函数的结果赋值给变量才能修改它
if var array = defaults.array(forKey: "myArray") {
array.append("NewElement")
}
你可以保存或读取一个数组,但你应该在保存之前完成你的工作,然后你可以在读取后开始使用或添加新数据。
PS:我使用 SwiftUI 作为展示案例,但是 saveData() 和 readData() 函数也可以在 UIKit 中使用。
import SwiftUI
struct ContentView: View {
var body: some View {
VStack(spacing: 20) {
Button("saveData") { saveData() }
Button("readData") { readData() }
}
.font(Font.body.weight(Font.Weight.bold))
}
}
func saveData() {
var array: [String] = [String]()
array.append("a")
array.append("b")
array.append("c")
UserDefaults.standard.set(array, forKey: "array")
print("saved!")
}
func readData() {
if let unwrappedData = UserDefaults.standard.stringArray(forKey: "array") {
var array: [String] = unwrappedData
array.append("d")
print(array)
}
}
您可以扩展 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"]