Как установить необязательную переменную с удобным инициализатором в swift?
У меня есть подкласс UITableViewController, который не должен работать, если нет модели. Если нет модели, нет никакой цели показывать представление.
Поэтому я думаю, что мое свойство модели не должно быть необязательным значением. Я хочу такой безопасности. Так что я пытаюсь создать удобный init, который передает мою модель.
let model:Client
override init() {
super.init(style: UITableViewStyle.Plain)
}
convenience init(model:Client) {
self.init()
self.model = model
}
Моя проблема в том, что я получаю эту ошибку:
Property 'self.model' not initialised at super.init call
Это имеет смысл. Если вызвать init(), свойство не будет установлено, как того требует необязательное свойство.
Я преодолею это?
Имейте в виду, что эта модель - моя настоящая Модель, установка значения по умолчанию здесь была бы бессмысленной, и опять-таки, отказ от безопасности, которую я ищу.
Спасибо!
Небольшое примечание: делать это не будет работать также. Там нет экземпляра для установки модели в любом случае.
convenience init(model:Client) {
self.model = model
self.init()
}
Изменить: подход ниже показался многообещающим
let model: Client
required init(coder aDecoder: NSCoder) {
preconditionFailure("Cannot initialize from coder")
}
init(model:Client) {
self.model = model
super.init(style: UITableViewStyle.Plain)
}
Тем не менее, он получает мне эту ошибку:
fatal error: use of unimplemented initializer 'init(nibName:bundle:)'
И, наконец, решение здесь было позвонить:
super.init(nibName: nil, bundle: nil)
1 ответ
Вам не нужно переопределять init()
здесь, и вы хотите сделать init(model:)
ваш назначенный инициализатор (не удобство). Вы можете сделать это так
let model: Client
required init(coder aDecoder: NSCoder) {
preconditionFailure("Cannot initialize from coder")
}
init(model:Client) {
self.model = model
super.init(style: UITableViewStyle.Plain)
}