观察绑定或状态变量

Posted

技术标签:

【中文标题】观察绑定或状态变量【英文标题】:Observing Binding or State variables 【发布时间】:2020-03-17 12:51:37 【问题描述】:

我正在寻找一种方法来观察@State@BindingonReceive 中的值变化。我无法让它工作,我怀疑这是不可能的,但也许有一种方法可以将它们转换为 Publisher 或其他东西,同时保持源更新值就像现在一样?

您可以在下面找到我需要这个的一些上下文:

我有一个父视图,它应该基于这个库显示半模态:https://github.com/AndreaMiotto/PartialSheet

为此,我创建了一个@State private var modalPresented: Bool = false,并使用它来显示和隐藏这个模态视图。这很好用,但是我的父母在初始化 self 后立即初始化了这个模式,所以我完全失去了 onAppearonDisappear 修饰符。问题是我需要onAppear 在每次呈现此模式时执行一些数据获取(理想情况下,当模式被解除时我也会取消网络任务)。

【问题讨论】:

改用 Observed / Observable。 【参考方案1】:

改用 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)
    

【讨论】:

以上是关于观察绑定或状态变量的主要内容,如果未能解决你的问题,请参考以下文章

将多个输入绑定到可观察数组中的同一变量(Knockout.JS)

python实现pearson相关性检验

如何从另一个变量或 Observable 观察一个变量?

Angular2:观察角度之外的外部变量

为啥可观察对象中的更新变量不会更新视图?

将两个或多个观察值放在一个变量中