【问题标题】:Initializing Realm Object class with multiple required initilizers使用多个必需的初始化程序初始化领域对象类
【发布时间】:2018-04-17 18:27:08
【问题描述】:

我正在初始化 Realm 对象,当我尝试初始化类时出现以下错误: 在我为领域添加初始化程序后,错误仍然存​​在。这是 xcode 的错误吗?

查看 swift-realm ios 项目here 的示例代码,看来我不需要调用所需的领域。也许示例代码已过时。

编辑—— 这是代码的粘贴:

class AgencyR: Object {
    @objc dynamic var agency_id: String = ""
    @objc dynamic var agency_name: String = ""
    @objc dynamic var agency_timezone: String = ""
    @objc dynamic var agency_url: String = ""
    @objc dynamic var agency_lang: String = ""
    @objc dynamic var agency_phone: String = ""
    @objc dynamic var agency_fare_url: String = ""

    required init(realm:Realm, agency_id: String, agency_name: String, agency_timezone: String, agency_url: String, agency_lang: String, agency_phone: String, agency_fare_url: String) {
        self.init()
        self.agency_id = agency_id
        self.agency_name = agency_name
        self.agency_timezone = agency_timezone
        self.agency_url = agency_url
        self.agency_lang = agency_lang
        self.agency_phone = agency_phone
        self.agency_fare_url = agency_fare_url
    }

    override static func primaryKey() -> String? {
        return self.agency_id
    }
}

【问题讨论】:

  • 不要在问题中包含代码作为屏幕截图。使用正确的格式将其作为文本包含在内,错误消息也作为文本包含在内,并指出哪一行代码产生了所述错误消息。
  • 不要在问题中包含代码作为屏幕截图,添加您的代码:)

标签: swift realm


【解决方案1】:

如果您想为 Object 子类创建指定的初始化程序,则需要实现所有必需的 Object 初始化程序,因为编译器将无法再为您合成这些初始化程序。

您可以通过将自定义初始化程序设置为便利初始化程序而不是指定初始化程序来解决此问题,这将允许您调用类的指定初始化程序,而不必调用超类初始化程序。您仍然可以根据需要标记便利初始化程序。

您的primaryKey 函数也存在问题。由于该函数是类型函数,因此您无法从函数内部访问实例,因此您无法调用self 来访问实例属性。但是,无论如何都不需要这样做,因为您只需要将变量名称作为要用作主键的String 返回。

class A: Object {
    @objc dynamic var a = 1

    required convenience init(_ a:Int) {
        self.init()
        self.a = a
    }

    override static func primaryKey()->String?{
        return "a"
    }
}

【讨论】:

  • 谢谢 - 这解决了我的问题。 Swift 对我来说很新,这在文档中并不容易找到。
【解决方案2】:

它应该是-> Object,而不是->String?,因为 Agency_id 是 Object 类型。试试这个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多