直接使用Realm对象(即作为CollectionView数据源)

时间:2015-12-10 21:56:16

标签: ios swift initialization realm

所以我有这个Realm Object类:

import Realm
import RealmSwift

class Realm_item: Object {
    var item_ID : String!
 required init() {
            super.init()
        }

        // And this one too
        required override init(realm: RLMRealm, schema: RLMObjectSchema) {
            super.init(realm: realm, schema: schema)
        }

        // Now go nuts creating your own constructor
        init(myCustomValue: String) {
            self.item_ID = myCustomValue
            super.init()
        }


    override class func primaryKey() -> String {
        return "item_ID"
    }

}

我试图初始化它,但它只是卡住了,没有异常或错误/崩溃。

  let item = Realm_item(myCustomValue: "SampleString")


  self.dataSource.append(item)

1 个答案:

答案 0 :(得分:3)

我对您的代码的评论很少。

  • item_ID应该是动态的
  • 最好为item_ID定义默认值,而不是将其设为可选
  • 您不应该创建或覆盖init,只能创建自定义init(s)作为方便
  • import Realm不需要import RealmSwift就足够了。

代码应如下所示。

import RealmSwift

class Realm_item: Object {
    dynamic var item_ID : String = ""

        // You should only define init(s) as convenience and call self.init() inside it.
      convenience init(myCustomValue: String) {
            self.init()
            self.item_ID = myCustomValue   
        }

    override class func primaryKey() -> String {
        return "item_ID"
    }
}

然后就像你一样使用它。

 let item = Realm_item(myCustomValue: "SampleString")
  self.dataSource.append(item)

我希望这会有所帮助。感谢。

更新

  • 动态关键字是什么意思?请参阅此Answer

  • 为什么我们将动态变量与领域一起使用?正如Realm Swift Docs

    中所说的那样
      

    Realm模型属性需要动态var属性   这些属性将成为底层数据库数据的访问者。

         

    这有两个例外:List和RealmOptional属性   不能声明为动态,因为通用属性不能   在Objective-C运行时中表示,用于动态   调度动态属性,并且应始终声明   让。

  • 将Realm对象用作DataSource是一种好习惯吗?方式 您在代码示例中使用dataSource作为 Array<Realm_Item>是一种很好的方法,因为数组大小不会改变 自动更新对象(如果 还有其他部分代码修改它)