Swift 斯威夫特-我没有';t打开一个可选的,但然后强迫我打开使用!而不是
我的代码中有一个错误,编译器警告我用消息打开一个可选文件 可选类型“NSDate”的值未展开;你想用“!”吗还是“?” 我的代码是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
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如果let
或无合并运算符(??
),则使用或安全地将其展开。格式化程序。stringFromDate(someDate)
将NSDate
作为参数,而不是可选的NSDate(NSDate?
)。因此,您需要使用as如果let
或无合并运算符(??
),则使用或安全地将其展开。格式化程序。stringFromDate(someDate)
将NSDate
作为参数,而不是可选的NSDate(NSDate?
)。因此,您需要使用as如果let
或无合并运算符(??
),则使用或安全地将其展开。格式化程序。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可选字符串,但不幸的是,事实并非如此。