2017-01-02 2 views
0

Следующий код позволяет мне получить доступ к свойству testView WalkthroughView.Назначение ViewController для пользовательского класса View не отображает пользовательские свойства вида

class WalkthroughViewController: UIViewController{ 

    var walkthroughView = WalkthroughView() 

    override func loadView() { 
     self.view = walkthroughView 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     walkthroughView.testView.backgroundColor = .cyan 
    } 
} 

Следующий код не позволяет мне получить доступ к свойству TestView из WalkthroughView.

class WalkthroughViewController: UIViewController{ 

    override func loadView() { 
     self.view = WalkthroughView() 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     //cant access the .testView 
     self.view.testView.backgroundColor = .cyan //this doesn't compile 
    } 
} 

Как это возможно? В первом примере создается объект WalkThroughView, который присваивается self.view. Вызов этого объекта позже позволяет мне изменять его свойства. Второй пример присваивает вид ViewController WalkthroughView(), при таком подходе он (насколько мне известно) недоступен для доступа к свойствам WalkthroughView.

Почему второй подход не позволяет мне получить доступ к объекту WalkthroughViewtestView?

ответ

2

В первом примере вы определяете переменную экземпляра walkThroughView типа WalkThroughView. Затем вы ссылаетесь на эту новую переменную со специальным типом.

Во втором примере вы создаете новый экземпляр WalkthroughView и храните его в свойстве представления контроллера представления, а затем ссылаетесь на него, чтобы узнать существующее свойство вида. Компилятор не знает, что self.view содержит переменную типа WalkThroughView. Вам нужно будет бросить его, чтобы это было законным.

if let walkthroughView = self.view as? WalkThroughView { 
    walkthroughView.testview.backgroundColor = .cyan 
} 
+0

Отличное и простое объяснение. Спасибо огромное! Однако не следует ли изменять код, если var walkthroughView? – Hapeki

+0

'If let' или' if var', да. Я исправил свой ответ. –