【问题标题】:Realm Unique ID with Swift 2使用 Swift 2 的领域唯一 ID
【发布时间】:2016-01-15 23:37:59
【问题描述】:

在 Realm 中,有没有办法为存储在数据库中的每个对象设置一个唯一的 ID?我不一定需要它每次都自动递增。我只是想知道有没有办法在 iOS 8 或更高版本的 Swift 2 中做到这一点?我知道你可以在 objC 中做到这一点。

【问题讨论】:

    标签: swift ios8 swift2 ios9 realm


    【解决方案1】:

    要为 Realm 中的所有对象生成 UUID,您可以创建一个生成 UUID 的超类:

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

    虽然这可行,但它确实带来了一个重大问题,至少在领域支持只读属性之前是这样。更新对象时,您必须先获取存储的对象,然后再保存。

    【讨论】:

    • 请注意,如果您将这些内容持久化到服务器上,这将导致问题 - 以这种方式生成的 id 不能保证是唯一的,并且可能会导致冲突。一种故障安全的方法是在创建时持久保存到服务器并让服务器发回一个 ID。虽然如果生成的 id 对用户来说是唯一的,这也没关系。
    • 确实,这是正确的,但这不是领域相关的问题。而是如何处理本地和远程存储的同步对象的问题,以及在使用任何类型的共享持久性时必须考虑的问题。
    • @ScottFister 我会说“为了有十亿分之一的重复机会,必须生成 103 万亿个版本 4 UUID”在许多用例中是可以接受的风险吗?见en.wikipedia.org/wiki/Universally_unique_identifier#Collisions
    • 很高兴知道@Zyphrax,这似乎不太可能:P
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 2017-08-26
    相关资源
    最近更新 更多