领域保留字

时间:2017-01-04 02:10:26

标签: ios swift realm

我遇到了Realm Swift的问题。我有一个对象,它假设存储有关用户创建的字符的信息。但是某些属性不能保存。如果我只用一个字母切换对象的名称,它会保存并正确读回。第一个示例拒绝保存除race属性的默认值之外的任何内容,但第二个示例将任何值保存到racea属性,没有任何问题。造成这种情况的原因是什么?

示例1

class Character: Object {

    //MARK: Properties
    dynamic var id: Int = 1
    dynamic var name: String = "John Appleseed"
    dynamic var level: Int = 1
    dynamic var exp: Int = 0
    dynamic var race: Int = 0
    dynamic var career: Int = 0
    dynamic var currentHealth: Int = 100
    dynamic var inventory: Inventory? = Inventory()

    //MARK: Realm
    override static func primaryKey() -> String? {
        return "id"
    }
}

示例2

class Character: Object {

    //MARK: Properties
    dynamic var id: Int = 1
    dynamic var name: String = "John Appleseed"
    dynamic var level: Int = 1
    dynamic var exp: Int = 0
    dynamic var racea: Int = 0
    dynamic var career: Int = 0
    dynamic var currentHealth: Int = 100
    dynamic var inventory: Inventory? = Inventory()

    //MARK: Realm
    override static func primaryKey() -> String? {
        return "id"
    }
}

扩展

extension Character {
    func getRace() -> String {
        return Fitventure.species[race]
    }
}

1 个答案:

答案 0 :(得分:0)

如果getRace()函数引起了问题,那么对我来说,这可能是Swift与Realm用来工作的Objective-C运行时反射功能之间的不幸碰撞。

Realm为其每个属性动态生成自己的访问器,以便明确管理如何从磁盘保存和检索数据。因此,不可能覆盖Realm属性的访问器,这样做会产生奇怪的行为。

最佳实践是您已经发现的:当创建另一个以某种方式转换Realm属性的方法时,您需要确保该函数没有可能由Objective-C运行时隐式生成的名称。