2014-12-19 1 views
1

У меня есть подкласс 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) 
+0

Это похоже на вариант использования для неявно развернутого дополнительного. Это необязательно (т. Е. Вы можете скомпилировать приложение без инициализации его в 'init'), но всякий раз, когда вы пытаетесь его использовать, он будет без проблем развернут для вас. – Rob

ответ

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) 
} 
+0

Фантастический! Спасибо, сэр :) +1 за константу. Я все время забываю об этом. – nmdias

 Смежные вопросы

  • Нет связанных вопросов^_^