首页 > 解决方案 > 使用tableView的titleForHeader的dateformatter从字符串转换日期但得到零错误

问题描述

我从 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 错误?

标签: iosswift

解决方案


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()

推荐阅读