RealmSwift: требуется общедоступная ошибка init()

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() в соответствии с предложениями. Теперь реализация по умолчанию запрашивает броски

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

Что должно быть внутри обязательного публичного init()? Нужно ли мне снова инициализировать переменные?


person Marin    schedule 23.06.2017    source источник


Ответы (1)


Как я упоминал в мом ответе на ваш предыдущий вопрос, переключив метод 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
    }
}
person bdash    schedule 23.06.2017
comment
Software Engineer at Realm вау вау вау) Stackoverflow — отличное место, чтобы задавать вопросы) - person Vasilii Muravev; 23.06.2017
comment
Верно! Теперь я чувствую себя глупо - по какой-то причине всегда думал, что эти три обязательных общедоступных инициализации должны быть там, несмотря на то, что вы упоминали об этом в коде ранее! - person Marin; 23.06.2017
comment
Без проблем! В общем, если вам когда-либо приходилось import Realm использовать Realm Swift, это признак того, что что-то не так. API Realm Swift можно использовать полностью, не обращаясь к символам из платформы Objective-C (хотя он должен быть включен в ваше приложение, поскольку сам RealmSwift использует структуру Objective-C). - person bdash; 23.06.2017
comment
Верный ! Я снял его, и теперь он выглядит хорошо. Поиграю еще немного с Realm в хранении и извлечении, спасибо вам и команде за отличную работу! - person Marin; 23.06.2017