iOS本地化 UserDefaults

内置类型

存储

1
UserDefaults.standard.set(phone, forKey: self.phoneNumberKey)

读取

1
let phoneNumber = UserDefaults.standard.string(forKey: self.phoneNumberKey)

自定义类型

对于自定义类型,需要用JSONEncoder和JSONDecoder转为Data类型才能进行存取,需要实现数据结构的encode和decode

数据结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
struct User: Codable {
let id: Int
let phone: String

enum Codingkeys: String, CodingKey {
case id, phone
}

init?(decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
self.id = try values.decode(Int.self, forKey: .id)
self.phone = try values.decode(String.self, forKey: .phone)
}

func encode(to encode: Encoder) throws {
var container = encode.container(keyedBy: CodingKeys.self)
try container.encode(id, forKey: .id)
try container.encode(phone, forKey: .phone)
}
}

存储

1
2
3
4
5
6
do {
let userData = try JSONEncoder().encode(UserAgent.shared.loginUser)
UserDefaults.standard.set(userData, forKey: self.userDataKey)
} catch {
print("encode errors: \(error)")
}

读取

1
2
3
4
5
6
do {
let userData = UserDefaults.standard.data(forKey:self.userDataKey)
UserAgent.shared.loginUser = try JSONDecoder().decode(User.self, from: userData)
} catch {
print("decode error: \(error)")
}
0%