如何在 iOS swift 中使用 RealmSwift 创建类似 firebase 结构的模型?
How to create model like firebase structure using RealmSwift in iOS swift?
我一直在尝试创建类似于 firebase 数据库结构的模型。我可以创建普通的字符串、bool 和 int 值,但不能创建数组和字典。
这是我的 firebase 结构截图:
我在这里尝试在类似 firebase 结构的模型中添加 groupMembers 和 to。
这是我尝试使用数组和字典创建的模型:
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>()
}
这是我的控制器代码:尝试将值添加到领域数据库中。
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)
}
}
如何在像 firebase 这样的领域数据库中获取 groupMemberss 和 to 结构。以及如何在领域中创建数组和字典
有很多解决方案,但这里有两个。
假设数据已被读入,并且 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.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。
我一直在尝试创建类似于 firebase 数据库结构的模型。我可以创建普通的字符串、bool 和 int 值,但不能创建数组和字典。
这是我的 firebase 结构截图:
我在这里尝试在类似 firebase 结构的模型中添加 groupMembers 和 to。
这是我尝试使用数组和字典创建的模型:
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>()
}
这是我的控制器代码:尝试将值添加到领域数据库中。
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)
}
}
如何在像 firebase 这样的领域数据库中获取 groupMemberss 和 to 结构。以及如何在领域中创建数组和字典
有很多解决方案,但这里有两个。
假设数据已被读入,并且 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.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。