0

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

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

class Example: SRKObject {

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

}

我正在尝试从出生日期计算年龄,并且我不想在表中有一列作为年龄。

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

谢谢你的支持。

4

2 回答 2

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. 由于实现将类似于上面的 for ignoredProperties,我将把实际的实现留给你 :)

于 2017-03-26T02:25:08.397 回答
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
}
于 2017-03-26T01:32:25.873 回答