0

我的代碼有錯誤,編譯器給出了一個警告,打開一個可選的消息Swift - 編譯器警告我還沒有解包可選,但然後迫使我解開使用!而不是?

可選類型'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並且它是零,那麼不會導致格式化字符串字符串(dob!)行崩潰。有人可以請解釋這裏發生了什麼以及這樣做的正確方法

回答

3

formatter.stringFromDate(someDate)NSDate作爲參數而不是可選的NSDate(NSDate?)。因此,您需要使用as!或使用if let或零合併運算符(??)安全地拆開包裝。

+0

thx。所以關鍵的是stringFromDate方法需要一個NSDate而不是一個可選的NSDate?我試圖在Matt Neuburgs的書中應用一個模式,並且「通過選擇性地解包可選」來發送消息給可選的,即讓myDate:AnyObject = NSDate() (myDate as?NSDate)?description ... ..這工作......但差異似乎是在我原來的問題中,dob是stringFromDate方法中的一個(非可選)參數 – lozflan

+0

是的,這是爲什麼它不是加工。我個人寧願函數採取一個可選日期,如果它是零將只返回一個零可選字符串,但不幸的是,它不是這樣。 – Ian

相關問題