ios - Swift 懒惰初始化不符合协议
问题描述
我在一个协议中声明了几个 UI 组件。
protocol SomeViewContainer {
var aView: ACustomizedView
...
}
class TestViewController: SomeViewContainer {
var aView: ACustomizedView!
}
上面的代码不会通过,因为编译器认为不TestViewController
符合协议。
将aView
在从远程获取数据后初始化,所以我不能只删除!
.
此外,对于协议中声明的其他一些属性,我更喜欢像下面这样的延迟初始化。
lazy var aView: UIView! = {
}()
仍然无法编译。关于如何使协议与延迟初始化一致,有什么想法吗?
解决方案
所以有两个问题,一个具有类型ACustomizedView!
的属性与一个属性不同,ACustomizedView
这就是它不符合的原因
其次,你应该能够使用惰性。那是你的实际代码吗?
延迟初始化使用自执行闭包,因此它会在调用时自动运行闭包代码,并为属性提供闭包返回的内容
事实上你在封闭内没有任何东西会导致它破裂..
您实际上需要从闭包内部返回一个视图
lazy var aView: UIView = {
let view = UIView()
// configure view
return view
}()
推荐阅读
- python-2.7 - 通过 GKE POD 中的 Cron 执行时,无法使用 Python SDK 将消息发布到 GCP Pub/Sub
- python - 是否可以在 Python 2.7 中导入 soundfie?
- python - 这 2 是从哪里输出的?使用 python 列表的斐波那契数列
- c# - 如何在 uwp 项目中隐藏最小化和最大化但保持关闭按钮?
- ios - 如何验证 iOS 耗材应用内购买?
- java - 从 Java 中的 SQLite 数据库中检索特定数据
- c# - 自定义模型绑定器在 Web api 中返回空对象
- c# - 字符串格式问题 - 添加两个小数点
- hive - 蜂巢查询不返回任何数据
- datadog - DataDog 顶部列表中的唯一标签计数