Я попытался найти некоторые актуальные вопросы, но ничего не мог получить, надеюсь, что кто-то может помочь.
Я установил некоторый UIViewController на раскадровке. Затем я хочу загрузить один из контроллеров представления в код и вставить его в стек навигации. Я считаю, что правильный способ сделать это - использовать
instantiateViewControllerWithIdentifier
Это вызывает init(coder: NSCoder)
, и все хорошо, моя программа работает, но я хочу иметь собственный инициализатор, который устанавливает некоторые переменные для моего контроллера представления. Рассмотрим следующее:
class A : UIViewController {
let i : Int
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
// property self.i not initialized at super.init call
}
}
Я, очевидно, получаю ошибку, так как i
необходимо указать во время создания объекта. Любые решения? Мне не интересно объявлять i
как var
и настраивать его позже, поскольку это побеждает точку, и у меня больше нет гарантии компилятора, что i
является неизменяемым.
Редактирование разъяснений
Предположим, что у меня есть загруженный в настоящее время ViewController
, который имеет некоторую переменную i
. Это значение является переменной и может меняться. Теперь предположим, что из этого ViewController я хочу представить еще один и инициализировать его с помощью i
.
class ViewController: UIViewController {
var i : Int
// ... other things
// in response to some button tap...
@IBAction func tappedButton(sender: AnyObject) {
let st = UIStoryboard(name: "Main", bundle: nil)
let vc = st.instantiateViewControllerWithIdentifier("AControllerID") as! A
// How do I initialize A with i ?
self.presentViewController(vc, animated: true, completion: nil)
}
}
Кажется, я не могу этого сделать и сохраняю i
неизменяемым, используя let
вместо var
.