代码之家  ›  专栏  ›  技术社区  ›  user4992124

领域模型没有初始值设定项

  •  1
  • user4992124  · 技术社区  · 6 年前

    我正在为我的模型使用一个自定义基类,以便与Realm一起用于Swift。这是班级。

    import RealmSwift
    
    public class ModelBase: Object {
        @objc public var createdAt, updatedAt: Date
    
        required convenience init() {
            createdAt = Date()
            updatedAt = Date()
    
            self.init()
        }
    }
    

    现在,当试图编译它时,Xcode将抛出一个错误

    类“ModelBase”没有初始化器

    但是,当我将初始值设定项函数更改为 required public init() super.init() ,Realm将开始抱怨我需要实现其他初始化器。有人知道我怎么解决第一个问题吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Peter Tretyakov    6 年前

    您需要使用自定义初始值设定项 init 参数,如下所示:

    import RealmSwift
    
    public class ModelBase: Object {
        @objc public dynamic var createdAt, updatedAt: Date
    
        convenience init(_ defaultDate: Date = Date()) {
            self.init()
    
            createdAt = defaultDate
            updatedAt = defaultDate
        }
    }
    

    在里面 convenience init self.init() 必须在初始化所有其他属性之前调用。您还需要将属性声明为 dynamic 因为他们的getter和setter是由Realm自己管理的。

    createdAt updatedAt Date() 默认情况下,您可以通过声明 var s在类声明中。

    public class ModelBase: Object {
        @objc public dynamic var createdAt: Date = Date()
        @objc public dynamic var updatedAt: Date = Date()
    }