因此,Realm的primaryKey类型仅包含Int和String。但是我有一个带有Date的结构,我想用作主键。我可以在没有主键的情况下存储该结构,但这意味着以后无法使用copyToRealmOrUpdate()方法。我可以将日期存储为int格式,无论我在代码中处理的位置如何,都可以将Date()转换为Int格式:
Int32( date.timeIntervalSinceReferenceDate)
但这是凌乱的/骇人听闻的(恕我直言)。
相反,我创建了一个“后备”变量,如下所示:
class MyData:Object {
@objc private dynamic var _dts:Int32 = 0
@objc dynamic var dts: Date = Date.distantPast
convenience init(dts:Date) {
self.init()
self._dts = dtsFrom(date:dts)
self.dts = dts
}
func dtsFrom(date:Date) -> Int32 {
return Int32( date.timeIntervalSinceReferenceDate)
}
func dateFrom(dts:Int32) -> Date {
return Date(timeIntervalSinceReferenceDate: Double(dts) )
}
override static func primaryKey() -> String? {
return "_dts"
}
}
创建MyData对象很简单,并且由于它是私有的,因此不会将_dts显示为由init()方法处理的_dts:
MyData(dts:Date())
在我走这条路之前,这是一种明智的工作方式,还是有更好的方法来处理此Realm限制?