我在协议(protocol)中声明了几个 UI 组件。
protocol SomeViewContainer {
var aView: ACustomizedView
...
}
class TestViewController: SomeViewContainer {
var aView: ACustomizedView!
}
上面的代码不会通过,因为编译器认为 TestViewController
不符合协议(protocol)。
aView
将在从远程获取数据后初始化,所以我不能只删除 !
。
此外,对于协议(protocol)中声明的其他一些属性,我更愿意像下面这样延迟初始化。
lazy var aView: UIView! = {
}()
还是编译失败。 关于如何使协议(protocol)符合惰性初始化有什么想法吗?
最佳答案
所以有两个问题,一个是 ACustomizedView!
类型的属性与 ACustomizedView
类型的属性不同,这就是它不符合的原因
其次,你应该能够使用惰性。 那是你的实际代码吗?
惰性初始化使用自执行闭包,因此它会在调用时自动运行闭包代码并为属性提供闭包返回的内容
闭包内没有任何东西的事实会导致它破裂..
您实际上需要从闭包内部返回一个 View
lazy var aView: UIView = {
let view = UIView()
// configure view
return view
}()
关于ios - Swift 惰性初始化不符合协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52751208/