RealmSwift:必需的公共init()错误

Mar*_*rin 1 realm ios swift

import RealmSwift
import Realm

public class Card : Object {
    dynamic var username: String = ""
    dynamic var firstName: String = ""
    dynamic var lastName: String = ""

    convenience init?(dictionary: [String:Any]?) {
        guard let dictionary = dictionary , let username =  dictionary["username"] as? String else { return else}
        self.init()
        self.username = username
        self.firstName = firstName 
        self.lastName = lastName
    }

    required public init() {
        fatalError("init() has not been implemented")
    }

    required public init( realm: RLMRealm, schema: RLMObjectSchema) {
        fatalError("init(realm:schema:) has not been implemented")
    }

    required public init( value: Any, schema: RLMSchema) {
       fatalError("init(value:schema:) has not been implemented")
    }
}
Run Code Online (Sandbox Code Playgroud)

根据建议,我将变量设为var而不是var,并将其初始化为空字符串。最初,我拥有方便的init()以及init()。添加领域之后,便利的init()根据建议调用self.init()。现在默认实现要求抛出

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

所需的公共init()中应该包含什么?我是否必须再次初始化变量?

bda*_*ash 5

正如我在对上一个问题的回答中提到的那样,通过将init?方法切换到便捷初始化器,不再需要从超类重写各种必需的初始化器。您可以简单地required public init从子类中删除这三个方法。

public class Card : Object {
    dynamic var username: String = ""
    dynamic var firstName: String = ""
    dynamic var lastName: String = ""

    convenience init?(dictionary: [String:Any]?) {
        guard let dictionary = dictionary,
            let username = dictionary["username"] as? String,
            let firstName = dictionary["firstName"] as? String,
            let lastName = dictionary["lastName"] as? String
            else { return nil }

        self.init()

        self.username = username
        self.firstName = firstName
        self.lastName = lastName
    }
}
Run Code Online (Sandbox Code Playgroud)