How can I run an action when a state changes?

后端 未结 7 2202
醉话见心
醉话见心 2020-12-05 22:25
enum SectionType: String, CaseIterable {
    case top = \"Top\"
    case best = \"Best\"
}

struct ContentView : View {
    @State private var selection: Int = 0

           


        
7条回答
  •  春和景丽
    2020-12-05 23:09

    You can't use didSet observer on @State but you can on an ObservableObject property.

    import SwiftUI
    import Combine
    
    final class SelectionStore: ObservableObject {
        var selection: SectionType = .top {
            didSet {
                print("Selection changed to \(selection)")
            }
        }
    
        // @Published var items = ["Jane Doe", "John Doe", "Bob"]
    }
    

    Then use it like this:

    import SwiftUI
    
    enum SectionType: String, CaseIterable {
        case top = "Top"
        case best = "Best"
    }
    
    struct ContentView : View {
        @ObservedObject var store = SelectionStore()
    
        var body: some View {
            List {
                Picker("Selection", selection: $store.selection) {
                    ForEach(FeedType.allCases, id: \.self) { type in
                        Text(type.rawValue).tag(type)
                    }
                }.pickerStyle(SegmentedPickerStyle())
    
                // ForEach(store.items) { item in
                //     Text(item)
                // }
            }
        }
    }
    

提交回复
热议问题