我正在尝试获取两个日期之间的差异,但是,我一直收到一条错误消息。
这是我的代码:
let fmt = ISO8601DateFormatter()
let date1 = fmt.date(from: "2017-08-06")!
let date2 = fmt.date(from: "2020-08-06")!
let diffs = Calendar.current.dateComponents([.day], from: date1, to: date2)
Text(diffs)
我还进口了粉底。
我的错误是初始化程序init(_:)
要求DateComponents
符合StringProtocol
。
任何帮助都会很棒。
这里有几个问题:
-
使用当前代码,在尝试将日期字符串转换为日期时会遇到崩溃,因为它无法正确解析,并且您使用的是
!
。这可以通过不同格式的字符串来解决 -
您正试图将
DateComponents
传递给Text
,这需要一个符合StringProtocol
的输入(正如错误所说(,而DateComponents
没有。您可以使用DateComponentsFormatter
转换为String
struct ContentView: View {
private let fmt = ISO8601DateFormatter()
private let formatter = DateComponentsFormatter()
var diffs : DateComponents {
guard let date1 = fmt.date(from: "2017-08-06T00:00:00Z"),
let date2 = fmt.date(from: "2020-08-06T00:00:00Z") else {
return DateComponents()
}
return Calendar.current.dateComponents([.day], from: date1, to: date2)
}
var body: some View {
Text("(formatter.string(from: diffs) ?? "unknown")")
}
}
如果经常重新呈现这个组件,那么最好将格式化程序存储在某个地方,这样每次都不会重新创建它们。