2017-01-02 4 views
0

Der folgende Code ermöglicht es mir, auf die TestView-Eigenschaft von WalkthroughView zuzugreifen.Das Zuordnen der ViewController-Ansicht zu einer benutzerdefinierten View-Klasse zeigt die benutzerdefinierten View-Eigenschaften nicht an

class WalkthroughViewController: UIViewController{ 

    var walkthroughView = WalkthroughView() 

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

    override func viewDidLoad() { 
     super.viewDidLoad() 

     walkthroughView.testView.backgroundColor = .cyan 
    } 
} 

Der folgende Code erlaubt mir nicht, die Testview Eigenschaft WalkthroughView zuzugreifen.

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 
    } 
} 

Wie ist das möglich? Das erste Beispiel erstellt ein Objekt von WalkThroughView, das zu self.view zugewiesen ist. Wenn ich dieses Objekt später anrufe, kann ich seine Eigenschaften ändern. Das zweite Beispiel weist der ViewController-Ansicht die WalkthroughView() zu. Bei dieser Vorgehensweise ist es (so weit ich weiß) nicht möglich, auf die WalkthroughView-Eigenschaften zuzugreifen.

Warum kann der zweite Ansatz nicht auf die WalkthroughViewtestView Eigenschaft zugreifen?

Antwort

2

In Ihrem ersten Beispiel definieren Sie eine Instanzvariable walkThroughView vom Typ WalkThroughView. Sie referenzieren es dann durch diese neue Variable mit einem speziellen Typ.

In Ihrem zweiten Beispiel erstellen Sie eine neue WalkthroughView-Instanz und speichern sie in der View-Eigenschaft des View-Controllers und verweisen sie dann durch die vorhandene view-Eigenschaft. Der Compiler weiß nicht, dass self.view eine Variable vom Typ WalkThroughView enthält. Sie müssten es so umwandeln, dass es legal ist.

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

Große und einfache Erklärung. Ich danke dir sehr! Aber sollte der Code nicht geändert werden, wenn var walkthroughView? – Hapeki

+0

'If let' oder' if var', yes. Ich habe meine Antwort korrigiert. –

Verwandte Themen