Swift 斯威夫特-我没有';t打开一个可选的,但然后强迫我打开使用!而不是

Swift 斯威夫特-我没有';t打开一个可选的,但然后强迫我打开使用!而不是,swift,xcode6,compiler-warnings,optional-values,forced-unwrapping,Swift,Xcode6,Compiler Warnings,Optional Values,Forced Unwrapping,我的代码中有一个错误,编译器警告我用消息打开一个可选文件 可选类型“NSDate”的值未展开;你想用“!”吗还是“?” 我的代码是 let formatter = NSDateFormatter() let dob = currUser.valueForKey(userTextFieldKeyNames[i]) as? NSDate let dobText = formatter.stringFromDate(dob) //compiler says i need to

我的代码中有一个错误,编译器警告我用消息打开一个可选文件

可选类型“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以允许对dobText的分配失败。编译器的消息表明我可以使用!或但只有使用dob才是幸福的!拆开。如果我尝试使用dob?编译器抱怨并强迫我使用


如果我强制展开dob并且它是nil,这不会导致formatter.stringFromDate(dob!)行崩溃。有人能解释一下这里发生了什么,以及执行此操作的正确方法吗?stringFromDate(someDate)将
NSDate
作为参数,而不是可选的NSDate(
NSDate?
)。因此,您需要使用
as
或无合并运算符(
??
),则使用
或安全地将其展开。

格式化程序。stringFromDate(someDate)
NSDate
作为参数,而不是可选的NSDate(
NSDate?
)。因此,您需要使用
as
或无合并运算符(
??
),则使用
或安全地将其展开。

格式化程序。stringFromDate(someDate)
NSDate
作为参数,而不是可选的NSDate(
NSDate?
)。因此,您需要使用
as
或无合并运算符(
??
),则使用
或安全地将其展开。

格式化程序。stringFromDate(someDate)
NSDate
作为参数,而不是可选的NSDate(
NSDate?
)。因此,您需要使用
as或使用
如果let
或无凝聚操作符(
)安全地将其展开。

thx。那么,关键是stringFromDate方法接受NSDate而不是可选的NSDate吗?我试图应用Matt Neuburgs书中关于向下广播的一种模式,并“通过选择性地展开可选的”ie let myDate:AnyObject=NSDate()(myDate as?NSDate)?向可选的发送消息。说明。。。。。这是可行的……但区别似乎在于,在我最初的问题中,dob是stringFromDate方法中的一个(非可选)参数是的,这就是它不起作用的根本原因。就我个人而言,我宁愿函数采用一个可选日期,如果该日期为nil,则只返回一个nil可选字符串,但不幸的是,事实并非如此。thx。那么,关键是stringFromDate方法接受NSDate而不是可选的NSDate吗?我试图应用Matt Neuburgs书中关于向下广播的一种模式,并“通过选择性地展开可选的”ie let myDate:AnyObject=NSDate()(myDate as?NSDate)?向可选的发送消息。说明。。。。。这是可行的……但区别似乎在于,在我最初的问题中,dob是stringFromDate方法中的一个(非可选)参数是的,这就是它不起作用的根本原因。就我个人而言,我宁愿函数采用一个可选日期,如果该日期为nil,则只返回一个nil可选字符串,但不幸的是,事实并非如此。thx。那么,关键是stringFromDate方法接受NSDate而不是可选的NSDate吗?我试图应用Matt Neuburgs书中关于向下广播的一种模式,并“通过选择性地展开可选的”ie let myDate:AnyObject=NSDate()(myDate as?NSDate)?向可选的发送消息。说明。。。。。这是可行的……但区别似乎在于,在我最初的问题中,dob是stringFromDate方法中的一个(非可选)参数是的,这就是它不起作用的根本原因。就我个人而言,我宁愿函数采用一个可选日期,如果该日期为nil,则只返回一个nil可选字符串,但不幸的是,事实并非如此。thx。那么,关键是stringFromDate方法接受NSDate而不是可选的NSDate吗?我试图应用Matt Neuburgs书中关于向下广播的一种模式,并“通过选择性地展开可选的”ie let myDate:AnyObject=NSDate()(myDate as?NSDate)?向可选的发送消息。说明。。。。。这是可行的……但区别似乎在于,在我最初的问题中,dob是stringFromDate方法中的一个(非可选)参数是的,这就是它不起作用的根本原因。就我个人而言,我宁愿函数采用一个可选日期,如果该日期为nil,则只返回一个nil可选字符串,但不幸的是,事实并非如此。