我在协议中声明了几个UI组件。
protocol SomeViewContainer {
var aView: ACustomizedView
...
}
class TestViewController: SomeViewContainer {
var aView: ACustomizedView!
}
以上代码不会通过,因为编译器认为TestViewController
不符合协议。
aView
将在从远程获取数据之后初始化,因此我不能仅仅删除!
。
另外,对于协议中声明的其他一些属性,我更喜欢像下面这样的惰性初始化。
lazy var aView: UIView! = {
}()
仍然无法编译。 是否有关于如何使协议具有延迟初始化的想法?
答案 0 :(得分:3)
所以有两个问题,一个是类型为ACustomizedView!
的属性与ACustomizedView
的属性是不同的,这就是为什么它不符合条件的原因
第二,您应该可以使用惰性。 那是您的实际代码吗?
惰性初始化使用自执行的闭包,因此它将在调用时自动运行闭包代码,并向属性提供闭包的返回值
您在封盖内什么都没有的事实会导致封盖破裂。
您实际上需要从闭包内部返回视图
lazy var aView: UIView = {
let view = UIView()
// configure view
return view
}()