从 UserDefaults 中解码 Swift 中的自定义结构数组
Decode an Array of an custom struct in Swift out of the UserDefaults
我想编码一个我自己结构的数组,我想把它保存在UserDefaults中,然后读出来(在解码之后)。我知道如何编写第一部分(以下),这意味着如何对数组进行编码并将其保存在 Userdefaults 中。
struct mystruct: Codable {
var int: Int
var string: String
}
var array = [mystruct(int: 2, string: "Example"), mystruct(int: 5, string: "Other Example")]
var encodedArray = try JSONEncoder().encode(array)
UserDefaults.standard.set(encodedArray, forKey: "array")
我也知道如何从 Userdefaults 取回数据:
var newArray = UserDefaults.standard.data(forKey: "array")
但我不知道如何解码整个数组...
您只需将自定义结构数组类型 [MyStruct].self
传递给 JSONDecoder
:
struct MyStruct: Codable {
let int: Int
let string: String
}
let myStructures: [MyStruct] = [.init(int: 2, string: "Example"),
.init(int: 5, string: "Other Example")]
do {
let encodedData = try JSONEncoder().encode(myStructures)
UserDefaults.standard.set(encodedData, forKey: "array")
if let decodedData = UserDefaults.standard.data(forKey: "array") {
let decodedArray = try JSONDecoder().decode([MyStruct].self, from: decodedData)
print(decodedArray)
}
} catch {
print(error)
}
这将打印:
[MyStruct(int: 2, string: "Example"), MyStruct(int: 5, string: "Other Example")]
我想编码一个我自己结构的数组,我想把它保存在UserDefaults中,然后读出来(在解码之后)。我知道如何编写第一部分(以下),这意味着如何对数组进行编码并将其保存在 Userdefaults 中。
struct mystruct: Codable {
var int: Int
var string: String
}
var array = [mystruct(int: 2, string: "Example"), mystruct(int: 5, string: "Other Example")]
var encodedArray = try JSONEncoder().encode(array)
UserDefaults.standard.set(encodedArray, forKey: "array")
我也知道如何从 Userdefaults 取回数据:
var newArray = UserDefaults.standard.data(forKey: "array")
但我不知道如何解码整个数组...
您只需将自定义结构数组类型 [MyStruct].self
传递给 JSONDecoder
:
struct MyStruct: Codable {
let int: Int
let string: String
}
let myStructures: [MyStruct] = [.init(int: 2, string: "Example"),
.init(int: 5, string: "Other Example")]
do {
let encodedData = try JSONEncoder().encode(myStructures)
UserDefaults.standard.set(encodedData, forKey: "array")
if let decodedData = UserDefaults.standard.data(forKey: "array") {
let decodedArray = try JSONDecoder().decode([MyStruct].self, from: decodedData)
print(decodedArray)
}
} catch {
print(error)
}
这将打印:
[MyStruct(int: 2, string: "Example"), MyStruct(int: 5, string: "Other Example")]