我将如何在 SwiftUI 中显示显示数组的文本
How would I display a text that shows an array in SwiftUI
我有一组日期
let Dates = ["2021-01-07","2021-01-19"]
我想在文本中将它们显示为 sting
Text("\(Dates)")
但是我一直收到错误
Cannot call value of non-function type '[String]'.
我想知道这样做是否可以在 swiftUI 中实现。
我也想知道我是否可以以
格式显示今天的日期
YYYY-MM-DDT00:00:00Z.
I wanted to know if this doing this could be achieved in 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.
- 在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: [=12=]) }.map { formatterOut.string(from: [=12=])}
.joined(separator: ", ")
}
var body: some View {
VStack {
Text(dates.joined(separator: ", "))
Text(datesToNewFormat)
}
}
}
请注意最后一项,它也处理时区转换。在您的示例中,如果您想要 T00:00:00Z
,最简单的 就是将其附加到原始字符串的末尾:
dates.map { [=13=] + "T00:00:00Z" }
或者,您可以使用 DateComponents 手动将小时设置为零。这可能完全取决于您的输入来自何处以及您对输出的意图。
可能还值得一提的是 SwiftUI 有 一些 内置工具用于在 [=14= 中显示 Date
].参见 https://www.hackingwithswift.com/quick-start/swiftui/how-to-format-dates-inside-text-views
我有一组日期
let Dates = ["2021-01-07","2021-01-19"]
我想在文本中将它们显示为 sting
Text("\(Dates)")
但是我一直收到错误
Cannot call value of non-function type '[String]'.
我想知道这样做是否可以在 swiftUI 中实现。
我也想知道我是否可以以
格式显示今天的日期YYYY-MM-DDT00:00:00Z.
I wanted to know if this doing this could be achieved in 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.
- 在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: [=12=]) }.map { formatterOut.string(from: [=12=])}
.joined(separator: ", ")
}
var body: some View {
VStack {
Text(dates.joined(separator: ", "))
Text(datesToNewFormat)
}
}
}
请注意最后一项,它也处理时区转换。在您的示例中,如果您想要 T00:00:00Z
,最简单的 就是将其附加到原始字符串的末尾:
dates.map { [=13=] + "T00:00:00Z" }
或者,您可以使用 DateComponents 手动将小时设置为零。这可能完全取决于您的输入来自何处以及您对输出的意图。
可能还值得一提的是 SwiftUI 有 一些 内置工具用于在 [=14= 中显示 Date
].参见 https://www.hackingwithswift.com/quick-start/swiftui/how-to-format-dates-inside-text-views