我使用SharkORM创建SQLite数据库,但我有以下问题。
如何加密和忽略sharkORM中的属性?
class Example: SRKObject {
dynamic var birthdate : NSDate?
dynamic var age : NSNumber?
}
我试图计算出生日期的年龄,我不想在表格中列出该年龄段的列。
另外,我的数据应该是安全的,所以我想加密生日,这怎么可以实现呢?
感谢您的支持。
答案 0 :(得分:2)
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
。由于实现类似于ignoredProperties
的上述实现,我将把实际的实现留给您:)
答案 1 :(得分:0)
来自文档:
在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
}