我正在使用SharkORM创建 SQLite 数据库,但我有以下问题。
如何加密和忽略 SharkORM 中的属性?
class Example: SRKObject {
dynamic var birthdate : NSDate?
dynamic var age : NSNumber?
}
我正在尝试从出生日期计算年龄,并且我不想在表中有一列作为年龄。
另外,我的数据应该是安全的,所以我想加密生日,如何实现?
谢谢你的支持。
看来我可能错了ignoreEntities
- 这不是你需要的。似乎他们的文档没有更新以反映这一点,但您真正需要的是ignoredProperties
:)
您需要忽略对象上的属性的实际 Swift 代码如下所示 - 我使用示例Person
对象来说明代码:
class Person: SRKObject {
dynamic var name : String?
dynamic var age : NSNumber?
dynamic var payrollNumber : NSNumber?
override class func ignoredProperties() -> [Any] {
return ["age"]
}
}
由于我之前没有使用过 SharkORM,因此我测试了代码以确保上述代码确实可以正常工作:)
关于实现的主题ignoredProperties
,通常,项目的单元测试(如果存在)是开始了解如何使用某种方法的好地方。但奇怪的是,SharkORM 似乎没有实施任何测试来查看ignoredProperties
它是否可以正常工作。希望开发团队中的某个人看到这一点并修复此疏忽:)
关于加密特定属性,我相信您需要做的就是实施encryptedPropertiesForClass
. 由于实现将类似于上面的 for ignoredProperties
,我将把实际的实现留给你 :)
从文档中:
在 Objective-C 中,属性需要使用@dynamic 来实现,这是向 ORM 表明它将控制从数据库中获取和设置这些值,而在 Swift 中,该属性被实现为 var dynamic
所以,如果你不想age
成为数据库中的一列,就不要将其标记为dynamic
. 由于您希望年龄成为计算属性,因此您将拥有以下内容:
var age: Int? {
if let birthdate = birthdate {
return // whole years from birthdate to today
}
return nil
}