【发布时间】:2020-05-22 09:08:04
【问题描述】:
假设我们有一个lazy imageView,并且我们希望仅在有要分配的图像时对其进行初始化。所以我们每次都需要检查图片的值:
lazy var imageView1 = UIImageView()
lazy var imageView2 = UIImageView()
var image: UIImage?
var someOptional: SomeType?
func addImage1IfNeeded() {
guard let image = image else { return }
imageView1.image = image
}
func addImage2IfNeeded() {
guard let image = someOptional?.someChildOptional?.image else { return }
imageView2.image = image
}
因此,如果我们有很多 optionals 和 lazy 变量以及一些可选链接情况,我们将有大量重复代码。
有什么更优雅的方法来做到这一点? (也许使用运算符?可选的扩展?)
请注意这不是为了优化。总结了这个示例,如果没有要显示的数据,您不想添加 UI 元素时会发生原始问题。在其他情况下也是如此。
【问题讨论】:
-
这似乎是过早的优化。您是否真的对创建带有空图像的
UIImageView进行基准测试会占用大量资源? AFAIK 这样做的计算成本不应该很高,因此您的优化似乎为时过早。 -
这不是为了优化。想象一下,如果没有要显示的数据,我不想添加子视图。此外,UI 元素并不简单
imageViews,而且相当昂贵。 @DávidPásztor
标签: swift optional lazy-evaluation