ios - 使用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 错误?
解决方案
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()
推荐阅读
- node.js - Mogodb 索引名称太长
- vue.js - 如何为具有插槽“附加”属性的 el 按钮设置样式
- python - 如何从您在 Pandas 上导入和清理的 CSV 中获取完整行?
- python - 数据集中的最小图像尺寸 (w*h) 太小,无法用作 Keras CNN 中的 target_size
- haskell - 过滤自定义数据类型
- terraform - terraform 远程执行配置程序无法连接到 ec2 实例
- node.js - 从 express api 到前端问题的异步等待问题
- javascript - 如何使用带有 if else 语句的提示打印值?
- reactjs - 如何访问项目根目录之外的静态文件?
- asp.net-core - 应用程序总是在未经授权的控制器或操作上返回登录页面,而不是 401