0

我的代码中有一个错误,编译器会发出警告,用消息解开可选选项

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

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

4

1 回答 1

3

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

于 2015-06-03T21:47:31.450 回答