首选哪种方式
人们普遍认为您应该避免!
(强制展开)这只是乞求崩溃,所以应该避免这种使用:
if let image = UIImage(named: "Pin") {
pinImageView = UIImageView(image: image)
pinImageView!.restorationIdentifier = "pin"
}
在这种情况下,由于您刚刚分配了pinImageView
,因此强制展开它是安全的,但它仍然会向您或将来阅读您的代码的任何其他人提出危险信号。“呃,他们在这里使用强制展开。那会崩溃吗?嗯,可能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
}
当您为对象分配许多属性时,此方法效果很好,因为您可以避免许多展开运算符。
不用担心额外的代码行。编译器会优化它。代码的可读性和清晰度。