2015-06-26 3 views
1

У меня есть некоторые проблемы с обработкой развернутой дополнительной константы на UIViewController.swift: обработка развернута опция в представленииDidLoad

Потому что компоненты пользовательского интерфейса существуют только после вызовов viewDidLoad. Кажется, я не могу использовать модификатор константы 'let' для постоянных переменных, которым нужна зависимость GUI.

Вот пример:

class ViewController: UIViewController { 

    @IBOutlet weak var blueSquare: UIView! 
    var animator:UIDynamicAnimator! 

    required init(coder aDecoder: NSCoder) { 
     // If animator was constant, it should be initialized here. 
     // But blueSquare is not initialized at this time, so I can't 
     // call UIDynamicAnimator(referenceView: blueSquare) 
     super.init(coder: aDecoder) 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // At this time, the initialisation is ok. But animator is now 
     // actually modifiable 
     self.animator = UIDynamicAnimator(referenceView: blueSquare) 
    } 
} 

Как вы можете видеть, аниматор написано, как будто это может быть изменяемым. Намерения нет.

Мой вопрос:: есть ли хороший шаблон, который может поставить «аниматор» как постоянный? Я не нашел никакой документации, связанной с viewDidLoad и константами с парадигмой зависимости GUI.

ответ

0

Вот почему вы должны использовать опционные.

При объявлении:

var animator:UIDynamicAnimator! 

Вы делаете компилятор считают, что аниматор не должен быть инициализирован перед вызовом инициализации (кодировщик). Это опасная игра, в которой вы играете. Вместо этого вы бы скорее использовали:

var animator:UIDynamicAnimator? 

, так что использование var перед его инициализацией сообщается как ошибка. Затем вы можете настроить его в viewDidLoad, и все вернется туда, где они должны быть.

Вы правы, полагая, что blueSquare может использоваться только позже в жизненном цикле контроллера, и это не имеет никакого отношения к синтаксису Swift; это рамочное ограничение. Поэтому вам нужно, чтобы аниматор был объявлен как болтающаяся ссылка, пока он не может быть использован для чего-то полезного. Это то, что вам предоставляется.