所以:
它说,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 ...
答案 0 :(得分:1)
假设您正在使用Swift 3,您应该使用以下内容:
type(of: self)
但是,为什么要自动增量字段?如果您想要一个唯一的密钥,只需使用UUID即可。当您希望应用程序跨多个设备(例如iPhone和iPad)同步时,自动增量字段会给您带来很大的问题。