使用Swift 2生成Realm唯一标识符

3
在Realm中,是否有一种方法为存储在数据库中的每个对象设置唯一的ID?我不需要它自动递增,只需要每次都是唯一的。我想知道在iOS 8或更高版本的Swift 2中是否有实现这个功能的方法?我知道在Objective-C中可以这样做。
1个回答

3
为了为您的Realm中的所有对象生成UUID,您可以创建一个生成UUID的超类:
class IdentifiableObject : Object {
    private(set) dynamic var uuid = NSUUID().UUIDString
}

Swift5

class IdentifiableObject : Object {
    private(set) dynamic var uuid = NSUUID().uuidString
}

虽然这样做是可以的,但还有一个很大的限制,至少在realm支持只读属性之前。当更新对象时,您必须先获取存储的对象才能保存。


请注意,如果您将这些内容持久化到服务器,则会引起问题——通过此方式生成的 ID 不能保证唯一性并可能导致冲突。一种安全的方法是在创建时将其持久化到服务器,并由服务器发送回一个 ID。但如果生成的 ID 对用户是唯一的,那么这样做就没有问题,例如。 - Scott Fister
确实,那是正确的,但这不是一个与领域相关的问题。这更多是关于如何处理本地和远程存储的对象同步的问题,而且在使用任何类型的共享持久性时都必须考虑到这一点。 - uɥƃnɐʌuop
2
@ScottFister 我认为,在许多情况下,“要使重复的概率达到十亿分之一,必须生成103万亿个版本4 UUID”是可以接受的风险。请参见https://en.wikipedia.org/wiki/Universally_unique_identifier#Collisions - Yvo
很高兴知道 @Zyphrax,那似乎相当不可能 :P - Scott Fister

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接