问题描述
我有一组日期
let Dates = ["2021-01-07","2021-01-19"]
我想在文本中显示它们作为刺
Text("\(Dates)")
但是我一直收到错误
Cannot call value of non-function type '[String]'.
我想知道这是否可以在 swiftUI 中实现。
我还想知道我是否可以以这种格式显示今天的日期
YYYY-MM-DDT00:00:00Z.
解决方法
- 在 Swift 中,通常变量名是小写的:
let dates : [String] = ["2021-01-07","2021-01-19"]
- 要显示
Text
中的这些内容,您需要将[String]
变成String
。一种可能性是:
Text(dates.joined(separator: ","))
- 如果您希望它们采用不同的格式,则需要将
String
转换为Date
:
struct ContentView: View {
@State private var formatterIn = DateFormatter()
@State private var formatterOut = ISO8601DateFormatter()
let dates : [String] = ["2021-01-07","2021-01-19"]
var datesToNewFormat : String {
formatterIn.dateFormat = "yyyy-MM-dd"
return dates.compactMap { formatterIn.date(from: $0) }.map { formatterOut.string(from: $0)}
.joined(separator: ",")
}
var body: some View {
VStack {
Text(dates.joined(separator: ","))
Text(datesToNewFormat)
}
}
}
注意最后一项,它也处理时区转换。在您的示例中,如果您想要 T00:00:00Z
,最简单的 事情就是将其附加到原始字符串的末尾:
dates.map { $0 + "T00:00:00Z" }
或者,您可以使用 DateComponents 手动将小时设置为零。这一切可能都取决于您的输入来自何处以及您对输出的意图。
可能还值得一提的是,SwiftUI 具有一些内置工具,用于在 Date
中显示 Text
。见https://www.hackingwithswift.com/quick-start/swiftui/how-to-format-dates-inside-text-views
我想知道这是否可以在 swiftUI 中实现。
当然!
struct ContentView: View {
let dates = ["2021-01-07","2021-01-19"]
var body: some View {
VStack {
Text("Today is \(todayDate())")
ForEach(dates,id: \.self) { date in
Text("\(date)")
}
}
}
func todayDate() -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "YYYY-MM-DDT00:00:00Z"
let today = Date() /// Date() is the current date
let todayAsString = dateFormatter.string(from: today)
return todayAsString
}
}
结果:
请注意,"YYYY-MM-DDT00:00:00Z"
日期格式的结果为 2021-04-1170
。你可能想要像 2021-04-27T11:56:55-0700
这样的东西。在这种情况下,做
dateFormatter.dateFormat = "YYYY-MM-d'T'HH:mm:ssZ"
''
包含您要添加的自定义字符,例如 T
。对于其他格式字符,请查看 this website。