gpt4 book ai didi

swift - 强制展开或使用可选链接来设置属性

转载 作者:行者123 更新时间:2023-11-28 14:29:46 24 4
gpt4 key购买 nike

给定一个可选的 var pinImageView: UIImageView?,它具有已设置的属性,我不确定设置属性的首选方式。例如:

if let image = UIImage(named: "Pin") {
pinImageView = UIImageView(image: image)
pinImageView?.restorationIdentifier = "pin"
}

if let image = UIImage(named: "Pin") {
pinImageView = UIImageView(image: image)
pinImageView!.restorationIdentifier = "pin"
}

最佳答案

which way is preferred

人们普遍认为您应该避免 !(force unwrapping),这只会导致崩溃,因此应该避免这种用法:

if let image = UIImage(named: "Pin") {
pinImageView = UIImageView(image: image)
pinImageView!.restorationIdentifier = "pin"
}

在这种情况下,由于您刚刚分配了 pinImageView,强制展开它是安全的,它仍然会向您或阅读您代码的任何其他人发出危险信号将来。 “呃,他们在这里使用 force unwrap。那会崩溃吗?好吧,pinImageView 可以是 nil 吗?不,它只是在上一行分配的,所以没关系”为什么要让自己和他人经历这个思考过程?尽可能避免 !

这种用法:

if let image = UIImage(named: "Pin") {
pinImageView = UIImageView(image: image)
pinImageView?.restorationIdentifier = "pin"
}

更安全,因为它使用可选链接 来展开 pinImageView 并避免了崩溃运算符 !,但它仍在展开一个可选变量。

第三种选择:

imageView 是可选的原因是您已将其分配给可选变量。相反,如果您在配置对象时使用 let 常量来保存对象,则可以避免用解包代码填充代码:

if let image = UIImage(named: "Pin") {
let imageView = UIImageView(image: image)
imageView.restorationIdentifier = "pin"
pinImageView = imageView
}

当您为对象分配许多属性时,此方法很有效,因为您可以避免使用许多展开运算符。

不用担心额外的代码行。编译器会优化它。代码的可读性和清晰度。

关于swift - 强制展开或使用可选链接来设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51345263/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com