[英]How to save a JSON array to Realm in Swift?
格式化后的 JSONData:
(title: "delectus aut autem", completed: false)
(title: "delectus aut autem", completed: true)
(title: "delectus aut autem", completed: true)
(title: "delectus aut autem", completed: false)
我的結構:
struct TodoListResponse: Decodable {
let title: String
var completed: Bool
}
領域數據模型
class TodoIItemList: Object {
@objc dynamic var title: String = ""
@objc dynamic var completed: Bool = false
}
ParseJson 數據和didUpdateData()
委托函數將數據發送到ViewController
func parseJSON(toDoListData: Data) {
let decoder = JSONDecoder()
do {
let jsonData = try decoder.decode([TodoListResponse].self, from: toDoListData)
self.delegate?.didUpdateData(jsonData)
} catch{
delegate?.didFailWithError(error: error)
}
}
在我的viewcontroller
, didUpdateData()
我想將我的數組保存到 Realm 但我失敗了。 我如何在這里保存數據。
import UIKit
import RealmSwift
class ViewController: UIViewController {
let realm = try! Realm()
var todoLists: Results<TodoIItemList>?
@IBOutlet weak var todoListTable: UITableView!
var dataManager = DataManager()
var listArray = [TodoListResponse]()
override func viewDidLoad() {
super.viewDidLoad()
dataManager.delegate = self
dataManager.fetchTodoListInformation()
//MARK: - call UITableView
setupTableView()
}
//MARK: - Setup or Register UITableView
func setupTableView() {
todoListTable.dataSource = self
todoListTable.register(UINib(nibName: K.cellNibName, bundle: nil), forCellReuseIdentifier: K.cellReuseIdentifier)
//todoListTable.separatorStyle = .none
todoListTable.contentInsetAdjustmentBehavior = .never
todoListTable .reloadData()
}
func save(_ object: [Object]) {
do{
try realm.write{
realm.add(object)
}
}catch{
print(error)
}
}
委托方式:
//MARK: - TodoDataManagerDelegate
extension ViewController: TodoDataManagerDelegate{
func didUpdateData(_ todoData: [TodoListResponse]) {
listArray = todoData
print("list: \(todoData)")
DispatchQueue.main.async {
//save(todoItem: listArray)
self.todoListTable.reloadData()
}
}
}
提前致謝。
save(todoItem: listArray)
不起作用,因為save
需要[Object]
,但listArray
是[TodoListResponse]
。
您缺少的是將可編碼結構TodoListResponse
轉換為 Realm 模型TodoIItemList
。 我會像這樣編寫save
方法:
func save(_ todoListResponses: [TodoListResponse]) {
do{
try realm.write{
for response in todoListResponses {
let object = TodoIItemList()
object.title = response.title
object.completed = response.completed
realm.add(object)
}
}
}catch{
print(error)
}
}
現在save(todoItem: listArray)
應該可以工作了。
如果需要在TodoIItemList
設置許多屬性,您可以將“復制屬性”邏輯移動到TodoIItemList
的便利初始化程序,該初始化TodoIItemList
從TodoListResponse
初始化TodoListResponse
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.