Post marked as solved
Click to stop watching this thread.
You have stopped watching this post. Click to start watching again.
contentPostList.repliessolved.tooltip
Replied In
SwiftUI List performane
This really worked with great performance. Maybe not what I would expected from the framework, but until SwiftUI become more mature I think this would be an accepted answer.Final solution that worked great:struct NameList: View {
@ObservedObject fileprivate var global = GlobalSettings()
@FetchRequest(
entity: Name.entity(),
sortDescriptors: [NSSortDescriptor(key: "name", ascending: true)]
) var names: FetchedResults<Name>
@State var selectedGender = Defaults.gender
@State var filtered = [Name]()
var body: some View {
NavigationView {
VStack {
Picker("Gender", selection: $global.gender) {
Text(Gender.female.rawValue.uppercased())
.tag(Gender.female)
Text(Gender.male.rawValue.uppercased())
.tag(Gender.male)
Text(Gender.unisex.rawValue.uppercased())
.tag(Gender.unisex)
}
.pickerStyle(SegmentedPickerStyle())
.padding()
List( filtered, id: \.objectID) { (item: Name) in
NameListRow(item: item)
}
}
}
.onReceive(Defaults.publisher(for: \.gender)) { (gender) in
self.selectedGender = gender
self.filterNames()
}
.onAppear {
self.filterNames()
}
}
fileprivate func filterNames() {
self.filtered = []
DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(100)) {
self.filtered = self.names.filter { $0.gender == self.selectedGender }
}
}
}