如何在列表中使用 date 和 dateFormatter?

How to use date and dateFormatter in a list?

我正在尝试制作一个简单的应用程序,当按下“添加”按钮时,它会向列表中添加一个新单元格,其中包含标题和创建日期。我正在使用 mvvm 创建此练习应用程序,但我不知道如何正确使用 date 和 dateFormatter。以下代码是我的:

型号:

struct Model: Identifiable {
    var id = UUID()
    var title: String
    var createdAt = Date()
    
}

视图模型:

class ViewModel: ObservableObject {
    @Published var items = [Model]()
}

和视图:

struct ContentView: View {
    static var DateFormatter: DateFormatter {
        let formatter = self.DateFormatter
        formatter.dateStyle = .long
        return formatter
    }
    
    @EnvironmentObject var viewModel: ViewModel
    
    var body: some View {
        NavigationView {
            List {
                ForEach(0 ..< viewModel.items.count, id: \.self) { index in
                    VStack {
                        Text(self.viewModel.items[index].title)
                        Text(self.viewModel.items[index].createdAt)
                    }
                }
            }
            .navigationBarTitle("Practice")
            .navigationBarItems(trailing: Button(action: makeNew) {
                Text("Add")
            })
        }
    }
    
    func makeNew() {
        withAnimation {
            viewModel.items.append(Model(title: "New Item \(viewModel.items.count + 1)", createdAt: Date()))
        }
    }
}

首先,Swift 命名约定是以小写字母开头的属性。

其次,您需要修复日期格式化程序声明:

static let dateFormatter: DateFormatter = { 
    let formatter = DateFormatter()
    formatter.dateStyle = .long
    return formatter
}()

然后你调用你的 ContentView 静态 属性 ContentView.dateFormatter.string(from: yourdate)。你的情况:

Text(ContentView.dateFormatter.string(from: self.viewModel.items[index].createdAt))