在视图控制器中创建一个 Publishable 属性,将其传递给 SwiftUI 视图并监听视图控制器内部的变化?

时间:2021-02-13 14:37:45

标签: swiftui combine

这就是我想要实现的目标:

class MyVC: UIViewController {
    @State var myBoolState: Bool = false

    private var subscribers = Set<AnyCancellable>()

    override func viewDidLoad() {
        super.viewDidLoad()

        myBoolState.sink { value in .... }.store(in:&subscribers)
    }

    func createTheView() {
        let vc = UIHostingController(rootView: MySwiftUIView(myBoolState: $myBoolState))
        self.navigationController!.pushViewController(vc, animated: true)
    }
}

struct MySwiftUIView: View {
    @Binding var myBoolState: Bool

    var body: some View {
          Button(action: {
              myBoolState = true
          }) {
              Text("Push Me")
          }

    }

}

但是上面的当然不能编译。

所以问题是:我能否以某种方式在视图控制器中声明一个已发布的属性,将其传递给 SwiftUI 视图并在 SwiftUI 视图更改其值时得到通知?

1 个答案:

答案 0 :(得分:0)

pandas.to_datetime() 包装器(按设计)仅在 SwiftUI 视图中起作用,因此您不能在视图控制器中使用它。相反,有 @State 模式用于此目的,因为它基于引用类型。

以下是针对您的场景的可能解决方案的演示:

ObsevableObject/ObservedObject