将ViewController的视图分配给自定义View类不会显示自定义View属性

时间:2017-01-02 21:08:30

标签: ios swift uiview uiviewcontroller

以下代码允许我访问WalkthroughView的testView属性。

class WalkthroughViewController: UIViewController{

    var walkthroughView = WalkthroughView()

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

    override func viewDidLoad() {
        super.viewDidLoad()

        walkthroughView.testView.backgroundColor = .cyan
    }
}

以下代码不允许我访问WalkthroughView的testView属性。

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。稍后调用此对象允许我更改它的属性。第二个示例将WalkthroughView()分配给ViewController的视图,这种方法(据我所知)不可能访问WalkthroughView属性。

为什么第二种方法不允许我访问WalkthroughView testView属性?

1 个答案:

答案 0 :(得分:3)

在第一个示例中,您将定义WalkThroughView类型的实例变量walkThroughView。然后,您通过具有特殊类型的新变量引用它。

在第二个示例中,您将创建一个新的WalkthroughView实例并将其存储到视图控制器的视图属性中,然后通过现有的视图属性引用它。编译器不知道self.view包含WalkThroughView类型的变量。您需要将其投射为合法的。

success