В Objective-C, это было очень легко и приятно быть в состоянии сделатьSwift геттер переопределения не вычисленный переменной
- (UIButton *)backButton{
if(!_backButton){
_backButton = [UIButton new];
}
}
В Swift Однако, когда вы переопределить свойство геттер, это называется вычисляемым переменным и каждый раз, когда вызывается self.backButton
, переменная пересчитывается. Этот пример хорошо иллюстрирует это:
private var backButton: UIBarButtonItem {
let button = UIButton(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width*0.06, height: self.view.frame.size.width*0.06))
button.setImage(UIImage(named: "back_arrow"), forState: UIControlState.Normal)
button.rac_signalForControlEvents(UIControlEvents.TouchUpInside).subscribeNext {
(next: AnyObject!) ->() in
self.navigationController?.popViewControllerAnimated(true)
return()
}
println("Recalculating the button")
let item = UIBarButtonItem(customView: button)
return item
}
Оператор println вызывается каждый раз, когда я получаю доступ к self.backButton. Кроме того, распечатываемый адрес памяти также изменяется каждый раз. Я понимаю, что это характер вычисленных переменных, поскольку они не хранятся в памяти.
Это аналогичный способ воспроизвести то же поведение, что и в Obj-C в Swift? Все, что я хочу, это способ создать экземпляр некоторой переменной пользовательского интерфейса один раз без необходимости вставлять этот код в метод инициализации.
Это на самом деле не работает, потому что вам нужно 'UIBarButtonItem = { ', а затем() в нижней части. @ Давид получил это правильно – barndog
Да, конечно. Забыл = и исправил. благодаря – Mario