【问题标题】:Trying to create a Swift Realm Data Model尝试创建 Swift 领域数据模型
【发布时间】:2014-12-22 04:05:44
【问题描述】:

我查看了 Realm.io 文档。我正在开发一个应用程序来跟踪我的车辆费用。我已经整理了我认为可能适用于 Realm 中的数据模型的内容,但我是新手,不确定这是否可行,或者是否有更好的方法来做到这一点。这就是我所拥有的,我还没有把它放在一个项目中并尝试编译。 realm.io 文档对我来说有点模糊,所以也许有人可以告诉我你的想法。我在一些我不确定如何实现我想要的地方添加了一些 cmets...

    // Vehicle model
class Vehicle : RLMObject {
    dynamic var name = “”
    dynamic var number = “”
    dynamic var currentMiles = 0
    dynamic var entries = RLMArray(objectClassName: Entry.className())
}

// Entry model
class Entry: RLMObject {
    dynamic var vehicle: Vehicle //??
    dynamic var date = NSDate()
    dynamic var expense = 0.0
    dynamic var mileage : Vehicle.currentMiles // want to update the Vehicle mileage with each entry

}

// Gas model
class Gas: Entry {
    dynamic var gallons = 0
    dynamic var pricePerGallon = 0.0
}

// OilChange model
class OilChange : Entry {
    dynamic var milesBetweenChanges = 0
}

// Other Service model
class OtherService: Entry {
    dynamic var notes = “”
}

【问题讨论】:

    标签: ios swift realm


    【解决方案1】:

    你在正确的轨道上!我认为唯一需要工作的模型是Entry。首先,这是带有我的注释的模型:

    // Entry model
    class Entry: RLMObject {
        dynamic var vehicle: Vehicle // This is valid Swift, but you'll need to set the value in the designated initializer (`init()`).
        dynamic var date = NSDate()
        dynamic var expense = 0.0
        dynamic var mileage : Vehicle.currentMiles // This isn't valid Swift, since `Vehicle` is a class, and doesn't have a `currentMiles` member
    }
    

    你想要的是这样的:

    // Entry model
    class Entry: RLMObject {
        dynamic var vehicle = Vehicle() // Use a default value so that `init()` succeeds, but you can still use `init(vehicle: Vehicle)` in your code
        dynamic var date = NSDate()
        dynamic var expense = 0.0
        dynamic var mileage = 0
    
        init() {
            // Must override init() when adding a convenience initializer
            super.init()
        }
    
        convenience init(vehicle: Vehicle) {
            super.init()
            self.vehicle = vehicle
            mileage = vehicle.currentMiles
        }
    }
    

    很遗憾,您发现 Realm 的文档含糊不清。如果您有什么特别需要我们澄清的,请告诉我们。我们是一群非常平易近人的人!

    【讨论】:

    • 我正在设计一个应用程序并决定使用 Realm。我很抱歉说您的文档含糊不清。它只是没有点击我,或者实际上它是,我只是没有意识到。便利初始化程序是我没想到的。我认为它只是感觉应该更难使用。我看着它,对自己说,“不——你在某个地方遗漏了一些东西,那应该花更长的时间”。您的文档并不含糊,只是我不安全或其他原因。这是提问的最佳场所吗?感谢您的回复和您的框架。很棒的东西。
    • 您可以继续在这里提问(请务必使用“realm”标签)。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 2015-11-12
    • 2016-03-27
    • 2013-02-10
    相关资源
    最近更新 更多