【发布时间】:2018-12-23 00:34:09
【问题描述】:
给定一个可选的 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"
}
【问题讨论】:
-
当没有被广泛接受的方式时,首选的答案可以是基于意见的。该网站似乎不适合收集此类意见。
-
Force unwrap(
!) 总是不鼓励的,因为它可能会使您的应用程序崩溃。在上面的例子中,虽然pinImageView是在对它使用强制解包(!)之前初始化的,并且它会在上面两种方法中按预期工作,但我仍然推荐第一种方法。避免习惯于有问题的方法。 -
@OOPer 我怎么能提前知道这个问题是基于意见的?一种方法可能被认为是错误的。
-
还有第三种选择:
if let image = UIImage(named: "Pin"), let view = UIImageView(image: image) { view.restorationIdentifier = "pin" } -
@Kamran
!不气馁。它有合法的用例。有时您无法以任何其他方式处理此案。声称您的应用不会崩溃而是创建未定义的应用行为并不是一个好主意。此外,我经常看到人们避免使用!,但仍然在他们的代码中添加fatalError()。
标签: swift forced-unwrapping optional-chaining