#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) {...}