使用dateformatter将字符串转换为tableView的titleForHeader的日期,但得到nil错误

时间:2018-09-25 17:59:18

标签: ios swift

我从collectionView日历中选择了一个想要格式化为日期的日期,并将其设置为同一View Controller中tableView的标题。但是,尝试格式化它并将其设置为标题时,出现错误。

这是我的错误代码:

var selectedDate = Date!
let formatter: DateFormatter = {
    let dateFormatter = DateFormatter()
    dateFormatter.timeZone = Calendar.current.timeZone
    dateFormatter.locale = Calendar.current.locale
    dateFormatter.dateFormat = "yyyy MM dd"
    return dateFormatter } ()


func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        formatter.dateFormat = "yyyy-MM-dd HH:mm:ss +zzzz"
        let dateForTableViewHeader = formatter.string(from: selectedDate) // Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
        return dateForTableViewHeader
    }

对于错误,我的控制台将打印:selectedDate Date?无

如果我将其全部更改为仅此行

return "\(String(describing: selectedDate))"

然后将所选日期打印为标题标题:可选(2018-09-25 07:00:00 +0000)

我想将其转换为日期格式,例如2018年9月25日。如果它直接打印selectedDate的值,为什么当我尝试将其转换为其他日期格式时却出现nil错误?

1 个答案:

答案 0 :(得分:0)

import Foundation

var selectedDate = Date()
let formatter: DateFormatter = {
     let dateFormatter = DateFormatter()
     dateFormatter.dateStyle = .full
     dateFormatter.timeZone = Calendar.current.timeZone
     dateFormatter.locale = Calendar.current.locale
     return dateFormatter

 } ()


 func printDate() -> String{
    print("selected date \(selectedDate)")
    formatter.dateFormat = "yyyy-MM-dd"
    let newDate = formatter.string(from: selectedDate)
    return newDate
 }

 printDate()