#ios #swift #swiftui #swiftui-list
#iOS #swift #swiftui #swiftui-список
Вопрос:
У меня есть список объектов в списке SwiftUI, и я хочу иметь возможность фильтровать этот список на основе пользовательских данных. У меня есть список, но я не знаю, как вызвать «обновить» в представлении списка
struct VitalsDetailView: View {
var body: some View {
var filteredVitals = VitalsManager.sharedInstance.vitals?.vitals?.filter({ $0.name == self.vitalName})
VStack(alignment: .leading, spacing: 5) {
VStack(alignment: .leading) {
HStack {
Text(NSLocalizedString("VitalsDetails.sortedBy", tableName: nil, bundle: Bundle.main, value: "Sorted By.", comment: ""))
.font(.system(size: 13))
.fontWeight(.medium)
Text(NSLocalizedString("VitalsDetails.dateReported", tableName: nil, bundle: Bundle.main, value: "Date Reported.", comment: ""))
.font(.system(size: 13))
.fontWeight(.light)
Text(displayText)
.font(.system(size: 13))
.fontWeight(.light)
Image(systemName: "arrow.up.arrow.down")
.renderingMode(.template)
.foregroundColor(.blue)
}
.onTapGesture(count: /*@START_MENU_TOKEN@*/1/*@END_MENU_TOKEN@*/, perform: {
//reorder list
if(newToOld) {
filteredVitals = filteredVitals!.sorted(by: {$0.dateOfIssue!.compare($1.dateOfIssue!) == .orderedAscending })
} else {
filteredVitals = filteredVitals!.sorted(by: {$0.dateOfIssue!.compare($1.dateOfIssue!) == .orderedDescending })
}
})
Text("Last Updated Date")
.font(.system(size: 15))
}
.padding()
List(filteredVitals!) { vital in
vitalsCell(vital: vital)
}
}
.frame(minWidth: 0,
maxWidth: .infinity,
minHeight: 0,
maxHeight: .infinity,
alignment: .topLeading)
.background(Color((#colorLiteral(red: 0.8039215803, green: 0.8039215803, blue: 0.8039215803, alpha: 1))))
.navigationBarTitle(vitalName)
}
}
Ответ №1:
Вы можете создать свое filteredVitals
состояние as (или перейти в модель представления и опубликовать), т. Е.
struct VitalsDetailView: View {
@State private var filteredVitals = VitalsManager.sharedInstance.vitals?.vitals?.filter({ $0.name == self.vitalName})
var body: some View {
// ... other code
Комментарии:
1. Отлично, спасибо!