可选类型 'Date?' 的值未展开;你是不是想用'!'要么 '?'?在 Swift 4 XCode 9

Value of optional type 'Date?' not unwrapped; did you mean to use '!' or '?'? In Swift 4 XCode 9

如何展开实体的日期 在哪里 @IBOutlet weak var dob: UIDatePicker!

var selectedEntity: TestEntity!

我有以下方法没人用过

self.dob.date = self.selectedEntity?.dob! // 错误编译时间

self.dob.date = self.selectedEntity?.dob as! Date // Waring 即将到来,如果 date 为 nil 则运行时崩溃

安全解包 selectedEntity

if let selectedEntity = self.selectedEntity {
    self.name.text = selectedEntity.name
    self.dob.date = selectedEntity.date
}

每当 Xcode 建议使用 ! 时,不要这样做。这是 Xcode.

最糟糕的特征

self.selectedEntity? 是可选的。它的所有值也是可选的。有关详细信息,请参阅 Swift 文档中的 Optional Chaining。在将它们用作非可选对象之前,您需要打开可选对象。这就是您在此处 self.selectedEntity?.dob! 使用 ! 符号时所做的事情。该力解开可选的包装,如果它为零,您的应用程序将崩溃。您的 self.dob.date 对象不是可选的,因此您必须在使用它之前打开可选的 self.selectedEntity?.dob 对象。你可以安全地用这样的东西打开你的 self.selectedEntity 对象。

if let selectedEntity = selectedEntity {
   self.dob.date = selectedEntity.dob
}