Post

Replies

Boosts

Views

Activity

Reply to SwiftUI List performane
I know this question was answered a while ago but your problem is having the state value in the top level view and not the subview. What you want: Top level view - don't reload the List NameListRow - Show or hide based on gender Solution struct NameList: View { &#9;&#9; &#9;&#9;@ObservedObject fileprivate var global = GlobalSettings() &#9;&#9; &#9;&#9;@FetchRequest( &#9;&#9;&#9;&#9;entity: Name.entity(), &#9;&#9;&#9;&#9;sortDescriptors: [NSSortDescriptor(key: "name", ascending: true)] &#9;&#9;) var names: FetchedResults<Name> &#9;&#9;&#9;&#9; &#9;&#9;var body: some View { &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9; &#9;&#9;&#9;&#9;return NavigationView { &#9;&#9;&#9;&#9;&#9;&#9; &#9;&#9;&#9;&#9;&#9;&#9;VStack { &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9; &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;Picker("Gender", selection: $global.gender) { &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;Text(Gender.female.rawValue.uppercased()) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;.tag(Gender.female) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;Text(Gender.male.rawValue.uppercased()) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;.tag(Gender.male) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;Text(Gender.unisex.rawValue.uppercased()) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;.tag(Gender.unisex) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;.pickerStyle(SegmentedPickerStyle()) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;.padding() &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9; &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;List( names, id: \.self) { (item: Name) in &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9; NameListRow(item: item) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;&#9;&#9; &#9;&#9;&#9;&#9;}&#9;&#9; &#9;&#9;}&#9; } struct NameListRow: View { &#9;&#9;@State var selectedGender = Defaults.gender var item: Item &#9; var body: some View { Group { if self.selectedGener == item.gender { content &#9;&#9;&#9;&#9; } } .onReceive(Defaults.publisher(for: \.gender)) { (gender) in self.selectedGender = gender }&#9;&#9; } var content: some View { *view logic* } }
Jan ’21