当前位置:网站首页>Swift uses userdefaults and codable to save an array of class objects or structure instances
Swift uses userdefaults and codable to save an array of class objects or structure instances
2022-07-05 10:10:00 【cppphp】
swift use UserDefaults And Codable Save an array of class objects or structure instances
I wrote an article before 《swift use UserDefaults And NSSecureCoding Save an array of class objects 》 The article , Although it can save class and structure arrays , But in actual use, each class or structure to be saved should be encoded and decoded , There is also more code when saving and reading , It is complicated to use , Especially when saving and reading arrays are frequent .
This article uses swift4.0 Agreement brought by Codable To solve the problems mentioned above .
Codable It is based on the basic agreement Encodable,Decodable,CodingKey Above . The specific content will not be expanded . In this article, its use is very simple , Just inherit the protocol when defining classes and structures . The code is as follows :
struct Item: Codable {
var uuid: UUID
var inAction: Int
var outAction: Int
var useful: Bool
}
Just follow the above definition , Don't ask 《swift use UserDefaults And NSSecureCoding Save an array of class objects 》 Then write the coding and decoding code as in , Is it simple .
To further simplify the code , Easy to use , Yes UserDefaults Expand as follows
extension UserDefaults {
// Save the class array
func set<T:Encodable>(classArrory object: [T], key: String) {
do {
let data = try JSONEncoder().encode(object)
self.set(data, forKey: key)
} catch {
print(error)
}
}
// Read the class array
func classArrory<T:Decodable>(forKey key : String) -> [T] {
guard let data = self.data(forKey: key) else { return [] }
do {
return try JSONDecoder().decode([T].self, from: data)
} catch {
print(error)
}
return []
}
}
In the above code , function set The main function is to encode and save the structure array , function classArrory Its main function is to read structural data and decode , Template parameters are used in both functions T, To specify different classes and structures . There is nothing else to say , Very simple, at a glance .
The foundation has been laid , Let's see how to use it
let ud = UserDefaults.standard
let item1 = Item(uuid: "00000023-0000-1000-8000-0026BB765291", inAction: 0, outAction: 1, useful: true)
let item2 = Item(uuid: "0000003E-0000-1000-8000-0026BB765475", inAction: 1, outAction: 1, useful: true)
var items = [item1, item2]
// Save the class array
ud.set(classArrory: items, key: "homekits")
...
// Read the class array
items = ud.classArrory(forKey: "homekits")
After defining the array , Write... In one line , One line readout , Is it simple ?
Related blogs
《swift use UserDefaults And NSSecureCoding Save an array of class objects 》
边栏推荐
- 搞数据库是不是越老越吃香?
- Cent7 Oracle database installation error
- Mysql80 service does not start
- QT timer realizes dynamic display of pictures
- Flutter development: a way to solve the problem of blank space on the top of listview
- On July 2, I invite you to TD Hero online press conference
- How to implement complex SQL such as distributed database sub query and join?
- Why don't you recommend using products like mongodb to replace time series databases?
- Observation cloud and tdengine have reached in-depth cooperation to optimize the cloud experience of enterprises
- Wechat applet - simple diet recommendation (2)
猜你喜欢

Coordinate system of view

基于单片机步进电机控制器设计(正转反转指示灯挡位)

On July 2, I invite you to TD Hero online press conference

百度智能小程序巡检调度方案演进之路

Understand the window query function of tdengine in one article

How to correctly evaluate video image quality
![[200 opencv routines] 219 Add digital watermark (blind watermark)](/img/ac/f6d16e74538bd589a1f6faee08d59a.png)
[200 opencv routines] 219 Add digital watermark (blind watermark)

Unity particle special effects series - the poison spray preform is ready, and the unitypackage package can be used directly - next

正式上架!TDengine 插件入驻 Grafana 官网

为什么不建议你用 MongoDB 这类产品替代时序数据库?
随机推荐
Evolution of Baidu intelligent applet patrol scheduling scheme
oracle和mysql批量Merge对比
正式上架!TDengine 插件入驻 Grafana 官网
【小技巧】獲取matlab中cdfplot函數的x軸,y軸的數值
Jupiter notebook shortcut key
基于单片机步进电机控制器设计(正转反转指示灯挡位)
Design and exploration of Baidu comment Center
mysql80服务不启动
[200 opencv routines] 219 Add digital watermark (blind watermark)
Data visualization platform based on template configuration
Analysis on the wallet system architecture of Baidu trading platform
Openes version query
双容水箱液位模糊PID控制系统设计与仿真(Matlab/Simulink)
Unity particle special effects series - the poison spray preform is ready, and the unitypackage package can be used directly - next
Those who are good at using soldiers, hide in the invisible, and explain the best promotional value works in depth in 90 minutes
Online chain offline integrated chain store e-commerce solution
How to get the STW (pause) time of GC (garbage collector)?
ThreadLocal source code learning
Comparison of batch merge between Oracle and MySQL
Implementation of smart home project