Swift - 编译器警告我没有解包一个可选的但随后强制我解包使用!而不是?

Swift - Compiler warns i haven't unwrapped an optional but then forces me to unwrap using ! rather than?

我的代码中出现错误,编译器发出警告,要求使用消息

解包可选

可选类型的值 'NSDate?' 未展开;你是不是想用'!'或“?”?

我的密码是

    let formatter = NSDateFormatter()
    let dob = currUser.valueForKey(userTextFieldKeyNames[i]) as? NSDate
    let dobText = formatter.stringFromDate(dob) //compiler says i need to unwrap dob using ! or ? ... but why am i forced to use ! rather than ? here
    field.text = dobText

我想用?打开 dob 以允许在 dob 为 nil 时对 dobText 的赋值失败。编译器的消息表明我可以使用!要么 ?但只有使用 dob 才会开心!打开。如果我尝试使用 dob?编译器抱怨并强迫我使用!。

如果我强制展开 dob 而它是 nil,那不会导致 formatter.stringFromDate(dob!) 行崩溃。有人可以解释一下这里发生了什么以及正确的方法吗

formatter.stringFromDate(someDate)NSDate 作为参数而不是可选的 NSDate (NSDate?)。因此,您需要使用 as! 不安全地强制解包,或者使用 if let 或 nil 合并运算符 (??).

安全地解包