У меня есть подкласс UITableViewController, который не должен работать, если нет модели. Если нет модели, на экране нет никакой цели.Как установить необязательную переменную с инициализатором удобства в swift?
Итак, я думаю, что мое свойство модели не должно быть необязательным значением. Я хочу такую безопасность. Поэтому я пытаюсь создать удобный 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()
}
Edit: Подход снизу казалось многообещающим
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)
Это похоже на вариант использования для неявно развернутого дополнительного. Это необязательно (т. Е. Вы можете скомпилировать приложение без инициализации его в 'init'), но всякий раз, когда вы пытаетесь его использовать, он будет без проблем развернут для вас. – Rob