Swift懒惰初始化不符合协议

时间:2018-10-11 02:18:39

标签: ios swift swift4.2

我在协议中声明了几个UI组件。

protocol SomeViewContainer {
    var aView: ACustomizedView
    ...
}

class TestViewController: SomeViewContainer {
    var aView: ACustomizedView!

}

以上代码不会通过,因为编译器认为TestViewController不符合协议。

aView将在从远程获取数据之后初始化,因此我不能仅仅删除!
另外,对于协议中声明的其他一些属性,我更喜欢像下面这样的惰性初始化。

lazy var aView: UIView! = {

    }()

仍然无法编译。 是否有关于如何使协议具有延迟初始化的想法?

1 个答案:

答案 0 :(得分:3)

所以有两个问题,一个是类型为ACustomizedView!的属性与ACustomizedView的属性是不同的,这就是为什么它不符合条件的原因

第二,您应该可以使用惰性。 那是您的实际代码吗?

惰性初始化使用自执行的闭包,因此它将在调用时自动运行闭包代码,并向属性提供闭包的返回值

您在封盖内什么都没有的事实会导致封盖破裂。

您实际上需要从闭包内部返回视图

lazy var aView: UIView = {
    let view = UIView()
    // configure view
    return view
}()