Swift - SharkORM忽略并加密属性

时间:2017-03-26 00:16:20

标签: ios swift sqlite dbaccess

我使用SharkORM创建SQLite数据库,但我有以下问题。

如何加密和忽略sharkORM中的属性?

class Example: SRKObject {

    dynamic var birthdate : NSDate?
    dynamic var age : NSNumber?

}

我试图计算出生日期的年龄,我不想在表格中列出该年龄段的列。

另外,我的数据应该是安全的,所以我想加密生日,这怎么可以实现呢?

感谢您的支持。

2 个答案:

答案 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
}