鉴于具有设置属性的可选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"
}
答案 0 :(得分:1)
首选哪种方式
通常应该避免使用!
(强制展开),这只是乞求崩溃,因此应避免使用此方法:
if let image = UIImage(named: "Pin") {
pinImageView = UIImageView(image: image)
pinImageView!.restorationIdentifier = "pin"
}
在这种情况下,由于您刚刚分配了pinImageView
,所以强制展开是安全的,但是它仍然会向您或以后读取您的代码的其他任何人发出危险信号。 “ U,他们在这里用力解包。会崩溃吗?好吧,pinImageView
是nil
吗?不,它只是在上一行中指定的,所以可以。”为什么要让自己和他人经历这种思考过程;尽可能避免使用!
。
此用法:
if let image = UIImage(named: "Pin") {
pinImageView = UIImageView(image: image)
pinImageView?.restorationIdentifier = "pin"
}
更安全,因为它使用可选链来解包pinImageView
,并避免了 crash运算符 !
,但它仍解开了可选变量。
第三种选择:
imageView是可选的原因是您已将其分配给可选变量。相反,如果在配置对象时使用let
常量保存对象,则可以避免用解包代码填充代码:
if let image = UIImage(named: "Pin") {
let imageView = UIImageView(image: image)
imageView.restorationIdentifier = "pin"
pinImageView = imageView
}
当您为对象分配许多属性时,此方法效果很好,因为可以避免许多展开运算符。
不用担心额外的代码行。编译器将对其进行优化。可读性和清晰度代码。
答案 1 :(得分:0)
我们的团队中有一条代码样式/审查规则,内容是“ <!没有使用!运算符,而没有说明其安全性的注释”。
因为!破坏了Swift中nil-safety的所有优点,随意使用它会导致崩溃,并将语言拖回C / C ++ / Java / C#/ Javascript / etc NullPointerException地狱。
所以在您的情况下
mysqli_query($con,"YOUR_QUERY");
选项绝对是首选。