gpt4 book ai didi

ios - 如何在 iOS swift 中使用 RealmSwift 创建类似 firebase 结构的模型?

转载 作者:行者123 更新时间:2023-11-28 05:40:02 24 4
gpt4 key购买 nike

我一直在尝试创建类似 firebase 数据库结构的模型。我可以创建普通的字符串、bool 和 int 值,但不能创建数组和字典。

这是我的 firebase 结构截图:

enter image description here

我在这里尝试添加 groupMembersto 到类似 firebase 结构的模型中。

这是我尝试使用数组和字典创建的模型:

import Foundation
import RealmSwift

class RealmMessages: Object {

@objc dynamic var messageText : String?
@objc dynamic var sender: String?
let chatCreatedDateTimee = List<timeStampValue>()
@objc dynamic var chatId: String?
@objc dynamic var from: String?
@objc dynamic var groupMemberss : [String: String]!
let groupMemebersCount = RealmOptional<Int>()
@objc dynamic var task: Bool = false
@objc dynamic var to: Array = [String]()


}

class timeStampValue: Object {

let timestamp = RealmOptional<Int>()

}

这是我的 Controller 代码:尝试将值添加到 Realm 数据库中。

var dic : [String : String] = [:]
var cont = ["one", "two", "three"]

var oneVal = ["909090": "SELF", "808080": "Other"]

override func viewDidLoad() {
super.viewDidLoad()



let realm = try! Realm()

print("realm location:::\(String(describing: Realm.Configuration.defaultConfiguration.fileURL))")


let myMessage = RealmMessages()

myMessage.messageText = "Diva"
myMessage.sender = "yIvq1mQxjfZpjs1ybRTTlDOmUKV2"

let timevalue = timeStampValue()
timevalue.timestamp.value = 123123131

myMessage.chatId = "+918000080000"
myMessage.from = "+918000080000"

myMessage.groupMemberss = oneVal
myMessage.to = cont

try! realm.write {

realm.add(myMessage)
}

}

如何获取 groupMemberssto Realm 数据库(如 firebase)中的结构。以及如何在 Realm 中创建数组和字典

最佳答案

有很多解决方案,但这里有两个。

假设数据已被读入,并且来自 groupMembers 快照的数据位于如下所示的字典 var 中

let groupMembersDict = [
"919": "participant",
"111": "observer",
"222": "participant"
]

要将其存储在 Realm 中,您可以使用原语并将每个键和值存储在单独的列表(想想:数组)中,或者您可以利用托管的 Realm 对象并将它们存储在列表中。

如果你想把数据保存在一个对象中;这就是它的样子。

class GroupData: Object {
@objc dynamic var num = ""
@objc dynamic var type = ""

convenience init(withNum: String, andType: String) {
self.init()
self.num = withNum
self.type = andType
}
}

这是显示两个选项的主要对象;选项 1:将键值对存储在两个数组中,或者选项 2:使用上述 GroupData 对象将键值对存储在一起

class Messages: Object {
@objc dynamic var messageText = ""

//option 1: two lists of primative strings that can be accessed like an array.
// downside is managing two lists
let groupNum = List<String>()
let groupType = List<String>()

//option 2: a list of members using another Realm object
let groupNumType = List<GroupData>()
}

还有一些代码来创建两条消息,每种消息一条

let msg0 = Messages()
msg0.messageText = "My message"
for member in groupMembersDict {
msg0.groupNum.append( member.key )
msg0.groupType.append( member.value )
}

let msg1 = Messages()
msg1.messageText = "This message"
for member in groupMembersDict {
let aGroup = GroupData(withNum: member.key, andType: member.value)
msg1.groupNumType.append(aGroup)
}

将它们存储在 Realm 中

realm.add(msg0)
realm.add(msg1)

在显示选项 2 的消息中读取它们。选项 1 只是遍历数组以打印组数据

let messageResults = realm.objects(Messages.self)

for msg in messageResults {
print(msg.messageText)
for group in msg.groupNumType {
print(group.num, group.type)
}
}

请记住,所有托管属性都必须是原语:NSString、NSDate、NSData、NSNumber 或 List、Results、RLMLinkingObjects 或 RLMObject 的子类,如上面所示的 GroupData。

关于ios - 如何在 iOS swift 中使用 RealmSwift 创建类似 firebase 结构的模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57109223/

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