Swift Realm - 编写一个generi Primary Key Autoincrement函数

时间:2016-11-11 00:16:49

标签: swift realm

所以:

  1. How do I set a auto increment key in Realm?
  2. Realm and auto increment Behavior (Android)
  3. https://github.com/realm/realm-java/issues/469
  4. 它说,Realm不支持主键自动增量。好的,所以我想自己补充一下。链接的帖子显示了这样做的方法。

    问题:建议的解决方案需要自己为每个模型类手动添加一个getNextPrimaryId()函数。这似乎非常愚蠢。我试图在Swift中自己写一个通用的,所以我只需要做一次,它会自动应用于我的所有模型类,但我失败了 - 因为我在Swift中不是那么好。

    尝试1:

    extension Object {
        func autoIncId() -> Int {
            let objects = Database.realm.objects(self).sorted("id")
            // Filter the max id here and return + 1
        }
    }
    

    尝试2:

    class Database {    
        static func autoIncId(type: Object) -> Int {
            let currentId = Database.realm.objects(type.self).map{$0.id}.maxElement ?? 0
            return currentId + 1
        }
    }
    

    两者都不能编译,因为“Cannot convert value of type "Object" to expected argument type "Object.Type""

    任何人都知道如何编写适用于所有模型的通用函数?我只想打电话给MyModelClass.autoIncId()以获取下一个ID ...

1 个答案:

答案 0 :(得分:1)

假设您正在使用Swift 3,您应该使用以下内容:

type(of: self)

但是,为什么要自动增量字段?如果您想要一个唯一的密钥,只需使用UUID即可。当您希望应用程序跨多个设备(例如iPhone和iPad)同步时,自动增量字段会给您带来很大的问题。