使用多个必需的启动器初始化Realm Object类

时间:2018-04-17 02:17:11

标签: swift realm

我正在初始化Realm对象,当我尝试初始化类时,我遇到了这些错误: enter image description here 在我为领域添加初始化程序后,错误仍然存​​在。这是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
    }
}

2 个答案:

答案 0 :(得分: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"
    }
}

答案 1 :(得分:0)

应该是IndexError: list index out of range,而不是with open('train_labels.csv', 'rb') as csvfile: lines = csv.reader(csvfile, delimiter = ' ', quotechar='|') for line in lines: os.rename(line[0], line[1]) ,因为agency_id的类型为Object。请尝试此操作。