【问题标题】:RealmSwift : required public init() errorRealmSwift:需要公共 init() 错误
【发布时间】:2017-11-27 10:26:41
【问题描述】:
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")
    }
}

根据建议,我将变量设为动态 var 而不是 var,并将它们初始化为空字符串。最初,我使用 init() 和 init() 一样方便。添加领域后,便利 init() 根据建议调用 self.init() 。现在默认实现要求 throws

(fatalError("init() has not been implemented")

在所需的 public init() 中应该包含什么?是否需要重新初始化变量?

【问题讨论】:

    标签: ios swift realm


    【解决方案1】:

    正如我在my answer to your previous question 中提到的,通过将您的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
        }
    }
    

    【讨论】:

    • Software Engineer at Realm wow wow wow)Stackoverflow 是个提问的好地方)
    • 对!我现在觉得很愚蠢 - 出于某种原因,我一直认为这三个必需的公共 init 必须存在,即使您之前在代码中也提到过它!
    • 没问题!一般来说,如果你在使用 Realm Swift 时发现自己不得不import Realm,这表明有些事情是不对的。可以完全使用 Realm Swift 的 API,而无需引用 Objective-C 框架中的符号(尽管它必须包含在您的应用程序中,因为 RealmSwift 本身使用的是 Objective-C 框架)。
    • 正确!我把它取下来了,现在看起来不错。将在 Realm 的存储和检索方面发挥更多作用,感谢您和团队的出色工作!
    猜你喜欢
    • 1970-01-01
    • 2015-12-17
    • 2016-01-08
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    相关资源
    最近更新 更多