0
メインモデルChatConversationModel
の配列プロパティuserAcitivities
はChatUserAcitivityModel
の配列です。私は、userAcitivities
にfriendID
が含まれているChatConversationModel
オブジェクトをRealmから取得したいと考えています。私はいくつかの方法を試しましたが、私が結果を得ることができませんでした。私は次のことをやっているし、それは私のために働いている瞬間レルムスウィフト内のネストされた配列のオブジェクトをフィルタリングします
import Foundation
import RealmSwift
import ObjectMapper
class ChatConversationModel: Object, Mappable {
dynamic var id = ""
dynamic var typeIndex = ChatTypes.ChatType.oneToOne.index
var userAcitivities = List<ChatUserAcitivityModel>()
override class func primaryKey() -> String? {
return "id"
}
convenience required init?(map: Map) {
self.init()
}
func mapping(map: Map) {
if map.mappingType == .fromJSON {
id <- map["id"]
typeIndex <- map["typeIndex"]
userAcitivities <- (map["userAcitivities"], ListTransform<ChatUserAcitivityModel>())
} else {
id >>> map["id"]
typeIndex >>> map["typeIndex"]
userAcitivities >>> (map["userAcitivities"], ListTransform<ChatUserAcitivityModel>())
}
}
}
import Foundation
import RealmSwift
import ObjectMapper
class ChatUserAcitivityModel: Object, Mappable {
dynamic var userID = ""
/// This is necessary in order to know from what point to download the chat if the user deleted it.
/// If this property is 0.0, then there has never been a deletion.
dynamic var removedChatTimeStamp = 0.0
override class func primaryKey() -> String? {
return "userID"
}
convenience required init?(map: Map) {
self.init()
}
func mapping(map: Map) {
if map.mappingType == .fromJSON {
userID <- map["userID"]
removedChatTimeStamp <- map["removedChatTimeStamp"]
} else {
userID >>> map["userID"]
removedChatTimeStamp >>> map["removedChatTimeStamp"]
}
}
}
func getFriendChatConversationModel(_ friendID: String) {
let realm = try! Realm()
let chatConversationModels = realm.objects(ChatConversationModel.self).filter("typeIndex = %@", ChatTypes.ChatType.oneToOne.index)
let friend = chatConversationModels.filter { $0.userAcitivities.filter { $0.userID == friendID } }
}
が、私はこれを表現するための最良の方法を見つけるしたいと思います:
func getFriendChatConversationModel(_ friendID: String) -> ChatConversationModel? {
let realm = try! Realm()
let chatConversationModels = realm.objects(ChatConversationModel.self).filter("typeIndex = %@", ChatTypes.ChatType.oneToOne.index)
var friendChatConversationModel: ChatConversationModel?
for chatConversationModel in chatConversationModels {
if chatConversationModel.userAcitivities.contains(where: { (chatUserAcitivityModel) -> Bool in
chatUserAcitivityModel.userID == friendID
}) {
friendChatConversationModel = chatConversationModel
return friendChatConversationModel
}
}
return nil
}
マイナーなスペルノート:クラスとプロパティの名前に「アクティビティ」と書かれている可能性があります。 – bdash