我将如何在 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.

  1. 在Swift中,通常变量名是小写的:
let dates : [String] = ["2021-01-07","2021-01-19"]
  1. 要显示Text中所写的这些,您需要将[String]变成String。一种可能性是:
Text(dates.joined(separator: ", "))
  1. 如果您希望它们采用不同的格式,您需要将 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