【发布时间】:2023-01-11 16:59:22
【问题描述】:
你好呀
我是SwiftUI新手,想对expireDate进行排序,然后用forEach根据expireDate显示视图,怎么办???
对不起,我的代码很乱,编码真的不容易。
如果有人可以提供帮助,将不胜感激
这是数据
import Foundation
struct CardData: Identifiable, Codable {
let id: UUID
var cardName: String
var cardNumber: String
var expireDate: Date
var theme: Theme
var history: [History] = []
init(id: UUID = UUID(), cardName: String, cardNumber: String, expireDate: Date, theme: Theme) {
self.id = id
self.cardName = cardName
self.cardNumber = cardNumber
self.expireDate = expireDate
self.theme = theme
}
}
extension CardData {
struct Data {
var cardName: String = ""
var cardNumber: String = ""
var expireDate: Date = Date.now
var theme: Theme = .orange
}
var data: Data {
Data(cardName: cardName, cardNumber: cardNumber, expireDate: expireDate, theme: theme)
}
mutating func update(from data: Data) {
cardName = data.cardName
cardNumber = data.cardNumber
expireDate = data.expireDate
theme = data.theme
}
init(data: Data) {
cardName = data.cardName
cardNumber = data.cardNumber
expireDate = data.expireDate
theme = data.theme
id = UUID()
}
}
这是视图
import SwiftUI
struct CardView: View {
@Binding var datas: [CardData]
@Environment(\.scenePhase) private var scenePhase
@State private var isPresentingNewCardView = false
@State private var newCardData = CardData.Data()
let saveAction: () -> Void
@EnvironmentObject var launchScreenManager: LaunchScreenManager
@State private var confirmationShow = false
var body: some View {
List {
ForEach($datas) { $data in
NavigationLink(destination: DetailView(cardData: $data)){
CardDataView(cardData: data)
}
.listRowBackground(data.theme.mainColor)
}
.onDelete(perform: deleteItems)
}
.navigationTitle("Expiry Date")
.navigationBarTitleDisplayMode(.inline)
.toolbar {
Button(action: {
isPresentingNewCardView = true
}) {
Image(systemName: "plus")
}
.accessibilityLabel("New data")
}
.sheet(isPresented: $isPresentingNewCardView) {
NavigationView {
DetailEditView(data: $newCardData)
.toolbar {
ToolbarItem(placement: .cancellationAction) {
Button("Dismiss") {
isPresentingNewCardView = false
newCardData = CardData.Data()
}
}
ToolbarItem(placement: .confirmationAction) {
Button("Add") {
let newData = CardData(data: newCardData)
datas.append(newData)
isPresentingNewCardView = false
newCardData = CardData.Data()
}
}
}
}
}
.onChange(of: scenePhase) { phase in
if phase == .inactive { saveAction() }
}
.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
launchScreenManager.dismiss()
}
}
}
func deleteItems(at offsets: IndexSet) {
datas.remove(atOffsets: offsets)
}
}
你好呀
我是SwiftUI新手,想对expireDate进行排序,然后用forEach根据expireDate显示视图,怎么办??? 对不起,我的代码很乱,编码真的不容易。 如果有人可以提供帮助,将不胜感激
【问题讨论】:
-
我假设您想对
datas数组进行排序。为此,请使用sort()方法,请参阅:developer.apple.com/documentation/swift/array/sort()
标签: sorting swiftui foreach binding