【问题标题】:Set a Date from string in swift 3在 swift 3 中从字符串中设置日期
【发布时间】:2016-12-11 19:44:50
【问题描述】:

我需要将值'datetime' mysql dbase 分配给变量类型Date()。 该记录将从 httprequest 作为字符串导入。 然后我想从字符串格式设置一个 Date() 。 所以我有这个功能:

func parseDate(dateStr:String, format:String="yyyy-MM-dd HH:mm") -> Date {

  let myLocale = Locale(identifier: "it_IT")
  let dateFormat = DateFormatter()
  dateFormat.timeZone = TimeZone(abbreviation: "CEST")
  dateFormat.locale = myLocale
  dateFormat.dateStyle = .medium
  dateFormat.timeStyle = .medium
  dateFormat.dateFormat = format

  return dateFmt.date(from: dateStr)
}

我有这个错误:“无法转换'日期类型的返回表达式?'在返回行返回类型“日期”。

我该如何解决。

【问题讨论】:

  • 让你的函数返回Date?,以防它无法解析字符串。
  • 如何使这个函数作为可选返回值
  • 不要手动设置您的区域设置或 timeZome。如果您的日期字符串中没有时区,只需使用日期格式化程序默认的区域设置和时区(默认为本地时间)
  • 在方法声明中不是-> Date,而是-> Date?

标签: mysql date swift3 xcode8


【解决方案1】:

在 swift 中,可选类型和非可选对应项不能被视为同一类型,即 DateDate? 是不同的类型。

date(from: String) 函数返回一个可选的Date - Date?,而您的函数返回一个非可选的Date

要修复您的函数,可以通过将 ...-> Date { 更改为 ...-> Date? 来返回可选值,或者通过在 return 语句上进行可选扩展来返回非可选值:return dateFmt.date(from: dateStr) ?? Date(timeIntervalSince1970: 0)

【讨论】:

  • 我绝对建议使用可选模式。 Swift 中可选项的整个想法是拥有一个可预测的、可靠的哨兵值。使用Date(timeIntervalSince1970: 0) 之类的东西与这种设计理念背道而驰。
  • 我实际上同意@Rob 我添加扩展只是为了完整性
  • 我已更改func parseDate(dateStr:String, format:String="yyyy-MM-dd HH:mm") -> Date? {.... 中的方法声明和返回语句return dateFmt.date(from: dateStr)。现在我有这个错误Cannot convert return expression of type 'Date?' to return type 'Date?'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-19
  • 1970-01-01
  • 2017-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多