为什么我在创建领域数据模型时需要必需的初始化程序?

why I need required initializer when creating Realm Data Model?

我是iOS开发的新手,我只是跟着网上的教程走

我实现realm之前的数据模型是这样的

import Foundation
import FirebaseFirestore

class CityKM {
    var name : String
    var coordinate : GeoPoint

    init (name: String , coordinate: GeoPoint ) {
        self.name = name
        self.coordinate = coordinate
    }

    init (dictionary: [String:Any]) {
        // this init will be used if we get data from firebase  to construct a city object

        name = dictionary["name"] as! String
        coordinate = dictionary["coordinate"] as! GeoPoint
    }


   }

并且在实施 Import RealmSwift 之后,我的 class 应该是这样的,通过 subclassing Object from realm

import Foundation
import FirebaseFirestore
import RealmSwift


class CityKM : Object {
    @objc dynamic var name : String = ""
    @objc dynamic var var coordinate : GeoPoint = Geopoint(latitude: 6.01212, Longitude: -101.212)

    init (name: String , coordinate: GeoPoint ) {
        self.name = name
        self.coordinate = coordinate
    }

    init (dictionary: [String:Any]) {
        // this init will be used if we get data from firebase  to construct a city object

        name = dictionary["name"] as! String
        coordinate = dictionary["coordinate"] as! GeoPoint
    }


   }

但我不明白为什么它总是报错说我的 CityKM class 应该需要初始化程序

required' initializer 'init()' must be provided by subclass of 'Object'

如果我修复错误并按照 xcode 中的修复说明进行操作,错误仍然存​​在,我不知道如何修复它,如下图所示

出了什么问题,我该怎么办?

尝试像这样声明您的 CityKM class

在这里您会找到使用它的原因的解释 convenience Initialization Apple

  class CityKM : Object {
    @objc dynamic var name : String = ""
    @objc dynamic var let coordinate : GeoPoint = Geopoint(latitude: 6.01212, Longitude: -101.212)

    convenience init (name: String , coordinate: GeoPoint ) {
        self.init()
        self.name = name
        self.coordinate = coordinate
    }

   convenience init (dictionary: [String:Any]) {
     self.init()
        // this init will be used if we get data from firebase  to construct a city object

        name = dictionary["name"] as! String
        coordinate = dictionary["coordinate"] as! GeoPoint
    }


}