Как вызвать метод в моей структуре представления из моего класса ObservableObject

#swiftui #observedobject

#swiftui #observedobject

Вопрос:

Я использую @ObservedObject PropertyWrapper для выбора средства выбора, и я хочу вызвать метод в моей структуре представления при изменении выбора. Как я могу это сделать?

Код ObservableObject:

 class SphereModel: ObservableObject {
    @Published var selection = -3 {
        didSet {
            // Call method (getAD()) here
        }
    }
}
  

Просмотр кода:

 struct ContentView: View {
    
    @ObservedObject var sphereModel = SphereModel()

    var body: some View {
        Picker("Sphere Thickness", selection: $sphereModel.selection) {
            ForEach((-24..<1).reversed(), id: .self) {
                Text(String(format: "%.1f", Double($0) / 2)).tag($0)
            }
        }
    }
    
    // Method to call
    func getAD() {
        
    }
}
  

Как мне это сделать?
Спасибо!

Ответ №1:

Вы можете использовать onReceive непосредственно в своем представлении:

 class SphereModel: ObservableObject {
    @Published var selection = -3
}

struct ContentView: View {
    @ObservedObject var sphereModel = SphereModel()

    var body: some View {
        Picker("Sphere Thickness", selection: $sphereModel.selection) {
            ForEach((-24 ..< 1).reversed(), id: .self) {
                Text(String(format: "%.1f", Double($0) / 2)).tag($0)
            }
        }
        .onReceive(sphereModel.$selection) { selection in
            print(selection)
            getAD()
        }
    }

    func getAD() {
        print("getAD")
    }
}
  

Комментарии:

1. Вы можете прослушивать опубликованного издателя напрямую, а не через Just издателя: .onReceive(sphereModel.$selection) {...}