Почему свойство @State в SwiftUI не читается снаружи?
Я только хочу не читать, а не менять значение свойства @State моего представления SwiftUI. В .onAppear значение будет изменено, но это изменение не будет видно внешнему миру. Почему?
class MyController : UIHostingController<SwiftUIView> {
public func getText() -> String? {
rootView.text
}
}
struct SwiftUIView: View {
@State public var text: String?
var body: some View {
Text(text ?? "Hello World")
.background(Color.red)
.onAppear {
text = "so und so"
}
}
}
class ViewController: UIViewController {
var subs = Set<AnyCancellable>()
var vc: MyController!
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
vc = MyController(rootView: SwiftUIView())
vc.view.backgroundColor = UIColor.green
addChild(vc)
view.addSubview(vc.view)
vc.view.frame = view.bounds
print("text = \(vc.getText() ?? "nil")")
Timer.publish(every: 1, on: .current, in: .default)
.autoconnect()
.receive(on: RunLoop.main)
.sink { _ in
print("text = \(self.vc.getText() ?? "nil")")
}
.store(in: &subs)
}
}
Я знаю, что @State и @ObservedObject существуют. @State предназначен для внутреннего управляемого состояния, @ObservedObject — для внешнего управляемого состояния. Но я не хочу менять значение, я только не хочу читать. Но почему это невозможно и почему возвращаемое значение равно нулю? Это просто неправильно. Это не проблема времени.
1 ответ
Объявите значение вViewController
и передать его вSwiftUIView
.