我一直在尝试创建类似于Firebase数据库结构的模型。我可以创建普通的字符串,bool和int值,但不能创建数组和字典。
这是我的Firebase结构屏幕截图:
在这里,我正在尝试在模型(如Firebase结构)中添加 groupMembers 和。
这是我尝试使用数组和字典创建的模型:
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)
}
}
如何在Realbase这样的领域数据库中获取 groupMemberss 和 结构。以及如何在领域中创建数组和字典
答案 0 :(得分:0)
有很多解决方案,但这是两个。
假设已读取数据,并且来自groupMembers快照的数据位于看起来像这样的字典var中
let groupMembersDict = [
"919": "participant",
"111": "observer",
"222": "participant"
]
要将其存储在Realm中,可以使用基元并将每个键和值存储在单独的List(认为是数组)中,也可以利用托管的Realm对象并将它们存储在List中。
如果要将数据保留在对象内;这是它的样子。
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。