Наблюдение за связыванием или переменными состояния - PullRequest
1 голос
/ 17 марта 2020

Я ищу способ наблюдения изменений значений @State или @Binding в onReceive. Я не могу заставить это работать, и я подозреваю, что это невозможно, но, возможно, есть способ преобразовать их в Publisher или что-то еще, в то же время сохраняя значение обновления источника, как это происходит сейчас?

Ниже вы можете найти контекст, зачем мне это нужно:

У меня есть родительское представление, которое должно отображать половину модального уровня на основе этой библиотеки: https://github.com/AndreaMiotto/PartialSheet

Для этого я создал @State private var modalPresented: Bool = false и использую его, чтобы показать и скрыть это модальное представление. Это прекрасно работает, но мой родитель инициализирует этот мод сразу после инициализации self, поэтому я полностью потерял модификаторы onAppear и onDisappear. Проблема в том, что мне нужно onAppear для выполнения выборки данных каждый раз, когда этот модальный вид представляется (в идеале, я бы также отменил сетевое задание, когда модал отклоняется).

1 Ответ

1 голос
/ 17 марта 2020

используйте взамен ObservableObject / ObservedObject.

пример

import SwiftUI

class Model: ObservableObject {
    @Published var txt = ""
    @Published var editing = false
}

struct ContentView: View {

    @ObservedObject var model = Model()

    var body: some View {
        TextField("Email", text: self.$model.txt, onEditingChanged: { edit in
            self.model.editing = edit
        }).onReceive(model.$txt) { (output) in
            print("txt:", output)
        }.onReceive(model.$editing) { (output) in
            print("editing:", output)
        }.padding().border(Color.red)
    }
}
...