Swift - SharkORM 忽略并加密 属性

Swift - SharkORM ignore and encrypt property

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

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

class Example: SRKObject {

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

}

我正在尝试根据生日计算年龄,但我不想在 table 中有一个年龄列。

另外,我的数据应该是安全的,所以我想加密出生日期,如何实现?

感谢您的支持。

来自文档:

In Objective-C properties need to be implemented using @dynamic, this is to indicate to the ORM that it will control the fetching and setting of these values from the database, and in Swift the property is implemented as var dynamic

因此,如果您不希望 age 成为数据库中的列,请不要将其标记为 dynamic。由于您希望 age 是计算得出的 属性,因此您会得到如下内容:

var age: Int? {
    if let birthdate = birthdate {
        return // whole years from birthdate to today
    }
    return nil
}

看来我对 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 的实现与上面的类似,我将把实际的实现留给你:)