使用Realm Swift和初始化程序会引发常量错误

drp*_*ken 3 realm ios swift

Xcode 7.1和Swift 2.1与最新的Realm Swift 0.96.2

我为Realm创建了一个模型类,但它不断地抛出有关inits的错误.我理解了子类的一定程度的初始化器,但我无法解决这个问题,以及它失败的原因.这是我制作的课程:

import UIKit
import RealmSwift

class Boxes: Object {

    dynamic var precessor: String = "B";
    dynamic var id: Int = 0;
    dynamic var boxNumber: String {
        return "\(precessor) \(id)";  //computed property
    }
    dynamic var boxDescription: String? = "";
    dynamic var brand: String? = "";
    dynamic let dateCreated: NSDate
    dynamic var dateUpdated: NSDate?
    dynamic var photo: UIImage?
    dynamic var tags: NSArray? = [];

    override static func primaryKey() -> String? {
        return "id";  //sets primary key of the model
    }

    init(precessor: String, id: Int, description: String, brand: String, dateCreated: NSDate, dateUpdated: NSDate) {
        self.precessor = precessor;
        self.boxDescription = description;
        self.brand = brand;
        self.dateUpdated = dateUpdated;
        self.dateCreated = dateCreated;

        super.init();
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试时它不会构建,它告诉我:

'required' initializer 'init()' must be provided by subclass of 'Object'
Run Code Online (Sandbox Code Playgroud)

我需要添加以下内容:

required init() {
        fatalError("init() has not been implemented")
    }
Run Code Online (Sandbox Code Playgroud)

这让编译器足够让我构建项目.但是当我运行项目时,它总是出错并在输出中给出fatalError行.我知道这是作为最后的手段初始化器,但我无法弄清楚为什么.

这与我在某处遗漏的超级初始化程序有关吗?我对swift相对较新,但如果我没有将我的类子类化,我可以使我的初始化器工作Object

Mik*_*ard 6

您需要实现,init()但Xcode不知道如何为您实现,因此它fatalError("init() has not been implemented")会提醒您实现它.

你可能只想打电话给超级.所以:

required init() {
    super.init()
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为这应该是正确的答案.也可以为所有属性添加默认值以解决此问题. (2认同)
  • 我不是专家,但我不认为`dynamic let dateCreated:NSDate`是有效的.从文档"除List和RealmOptional之外的所有属性类型都必须声明为动态var" (2认同)