Ios 仅当主键唯一时才附加到域列表

Ios 仅当主键唯一时才附加到域列表,ios,swift,realm,Ios,Swift,Realm,我正在我的iOS项目中实现Realm,我想知道是否只有当对象的主键是唯一的时,才有办法将对象附加到列表。目前我有一些类似于: let realm = try! Realm() let message = RealmMessage() message.id = 99999 message.desc = "Please Help!" let chatroom = realm.objects(RealmChatRoom.self)[0] try! realm.write { chatroom.

我正在我的iOS项目中实现Realm,我想知道是否只有当
对象的主键是唯一的时,才有办法将
对象
附加到
列表
。目前我有一些类似于:

let realm = try! Realm()
let message = RealmMessage()
message.id = 99999
message.desc = "Please Help!"
let chatroom = realm.objects(RealmChatRoom.self)[0]
try! realm.write {
    chatroom.messages.append(message)
}
try! realm.write {
        realm.add(chatRoom, update: .modified)
    }
但是,如果消息已在列表中,则此操作将崩溃

我知道可以使用以下方法更新完整的对象:

let realm = try! Realm()
let message = RealmMessage()
message.id = 99999
message.desc = "Please Help!"
let chatroom = realm.objects(RealmChatRoom.self)[0]
try! realm.write {
    chatroom.messages.append(message)
}
try! realm.write {
        realm.add(chatRoom, update: .modified)
    }

但是对于
append
,是否存在类似的内容?即,仅在唯一键被覆盖时写入?

列表存储对象引用及其元素,并使用
消息自动更新。因此,如果
chatroom.messages
包含
消息
,则无需再次追加该消息。因此,您可以使用此代码更新:

try! realm.write {
    realm.add(message, update: .modified)
    if !chatroom.messages.contains(message) {
        chatroom.messages.append(message)
    }
}

主键的可能重复项必须是唯一的。声明主键允许高效地查找和更新对象,并强制每个值的唯一性。设置主键的方式是一个问题-一个解决方案是使用
nsuid().UUIDString
分配键。它们将保证独特性并缓解问题。您将知道消息是否已经在列表中,因为您将加载它以进行更改,然后可以通过它的主键进行更新。实际上,您不需要在上面的代码中首先添加消息,只需添加消息就足够了,它会自动添加消息。这不是我要寻找的,尽管我想在不首先检查消息是否包含消息的情况下追加。