gpt4 book ai didi

ios - 将 Json 数据数组添加到 Realm

转载 作者:行者123 更新时间:2023-11-30 11:01:04 24 4
gpt4 key购买 nike

我正在为机场制作一款应用程序,我从一个 api 获取一组数据,如下所示:

"data":[
{"id":"001","code":"ABZ","name":"Aberdeen","country":"United Kingdom"},
{"id":"002","code":"AUH","name":"Abu Dhabi","country":"United Arab Emirates"},
.
.
.
]

并且:

"airports":[
{"from":"001",
"to":["1","3","11","13","12","20","23","27","29","31","33"]
},
.
.
.
]

我已经创建了 Realm 模型类:

class AirportsDataRealm: Object {
@objc dynamic var name: String = ""
@objc dynamic var id: Int = 0
@objc dynamic var code: String = ""
@objc dynamic var country: String = ""
override static func primaryKey() -> String? {
return "id"
}
}

class AirportsFromToRealm: Object {
@objc dynamic var fromID: Int = 0
var toID = List<Int>()
override static func primaryKey() -> String? {
return "fromID"
}
}

现在我想将它保存到 Realm 中,我正在使用 swiftyJSON 并且我已经使用 for-loop 来做到这一点,它工作正常,但我认为它需要很长时间,因为数组很长,这就是我的已经完成:

    // Airports Data
let countData = json["data"].count
for i in 0...countData - 1{
let airportsDataModel = AirportsDataRealm()
airportsDataModel.code = json["data"][i]["code"].stringValue
airportsDataModel.name = json["data"][i]["name"].stringValue
airportsDataModel.country = json["data"][i]["country"].stringValue
airportsDataModel.id = Int(json["data"][i]["id"].stringValue)!
try! realm.write {
realm.add(airportsDataModel, update: true)
}
}

//Airports FROM-TO
let countFromTo = json["airports"].count

for i in 0...countFromTo - 1{
let fromToDataModel = AirportsFromToRealm()
fromToDataModel.fromID = Int(json["airports"][i]["from"].stringValue)!
let arrayTo = json["airports"][i]["to"].arrayValue.map{ $0.intValue }
fromToDataModel.toID.append(objectsIn: arrayTo)

try! realm.write {
realm.add(fromToDataModel, update: true)
}
}

有没有一种方法可以在不使用for循环的情况下一次性保存realm中的整个数组?

附注“两个表之间应该存在关系,因为每个 from 'id' 都有一个 'to' id 列表,并且 id 来自数据表,现在我在使用过滤器获取数据时设法创建了这种关系,所以忽略这个”

谢谢

最佳答案

只需使用map方法,

首先,我需要向对象类添加初始值设定项并将 json 数组作为参数传递,如下所示:

class AirportsDataRealm: Object {
@objc dynamic var name: String = ""
@objc dynamic var id: Int = 0
@objc dynamic var code: String = ""
@objc dynamic var country: String = ""
convenience required init(withJSON json : JSON) {
self.init()
self.name = json["name"].stringValue
self.id = json["id"].intValue
self.code = json["code"].stringValue
self.country = json["country"].stringValue
}
override static func primaryKey() -> String? {
return "id"
}
}


class AirportsFromToRealm: Object {
@objc dynamic var fromID: Int = 0
var toID = List<Int>()
convenience required init(withJSON json : JSON) {
self.init()
self.fromID = json["from"].intValue
let toArray = json["to"].arrayValue.map{ $0.intValue }
self.toID.append(objectsIn: toArray)
}

override static func primaryKey() -> String? {
return "fromID"
}
}

然后通过使用map方法,代码将如下所示:

func updateAirport(json: JSON) {
// Airports Data
let airportsData : [AirportsDataRealm]
let airportsDataJsonArray = json["data"].array
airportsData = airportsDataJsonArray!.map{AirportsDataRealm(withJSON: $0)}
//Airports FROM-TO
let airportsFromTo : [AirportsFromToRealm]
let airportsFromToJsonArray = json["airports"].array
airportsFromTo = airportsFromToJsonArray!.map{AirportsFromToRealm(withJSON: $0)}
//Write To Realm
try! realm.write {
realm.add(airportsData, update: true)
realm.add(airportsFromTo, update: true)
}
}

不再有for循环^_^

关于ios - 将 Json 数据数组添加到 Realm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53358459/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com