@Published 属性不触发任何内容

2024-01-11

我有这个协议:

protocol MyProtocol:ObservableObject {
  var codeDetected:CodeDetected { get set }
  var codeDetectedPublished: Published<CodeDetected> { get }
  var codeDetectedPublisher: Published<CodeDetected>.Publisher { get }
}

这是检测到的代码

class CodeDetected:ObservableObject {
  var title: String
  var value:String

  init(title:String = "", value:String = ""){
    self.title = title
    self.value = value
  }
}

后来一堂课...

class MyModel: MyProtocol {

  @Published var codeDetected:CodeDetected = CodeDetected()
  var codeDetectedPublished: Published<CodeDetected> { _codeDetected}
  var codeDetectedPublisher: Published<CodeDetected>.Publisher { $codeDetected }
}

问题是改变codeDetected在此类上,不会触发观察它的结构上的任何内容。

稍后实施

struct MyView: View {
  @ObservedObject let myModel = MyModel()

我正在为其设置新值,例如

codeDetected = newCodeDetected

尝试观察你的模型

@StateObject var myModel = MyModel()

没有最小可重复示例 https://stackoverflow.com/help/minimal-reproducible-example我们正在这里分崩离析。

你没有观察title and value任何一个。放一个@Published观察他们,然后以他们自己的方式观察他们View

protocol MyProtocol:ObservableObject {
    var codeDetected:CodeDetected { get set }
    //var codeDetectedPublished: Published<CodeDetected> { get }
    //var codeDetectedPublisher: Published<CodeDetected>.Publisher { get }
}

class CodeDetected:ObservableObject {
    @Published var title: String
    @Published var value:String
    
    init(title:String = "init", value:String = "init"){
        self.title = title
        self.value = value
    }
}
class MyModel: MyProtocol {
    
    @Published var codeDetected:CodeDetected = CodeDetected()
    //var codeDetectedPublished: Published<CodeDetected> { _codeDetected}
    //var codeDetectedPublisher: Published<CodeDetected>.Publisher { $codeDetected }
}
struct CodeDetectedView: View {
    @StateObject var myModel = MyModel()
    var body: some View {
        VStack{
            //Can't see updates here unless you ask for them/tell the parent model there are changes
            Text(myModel.codeDetected.title)
            .onReceive(myModel.codeDetected.$title, perform: { _ in
                myModel.objectWillChange.send()
            })
            Text(myModel.codeDetected.value)
                .onReceive(myModel.codeDetected.$value, perform: { _ in
                    myModel.objectWillChange.send()
                })
            CodeDetectedSubView(codeDetected: myModel.codeDetected)
        }
    }
}
struct CodeDetectedSubView: View {
    @ObservedObject var codeDetected: CodeDetected
    var body: some View {
        //Can see here
        Text(codeDetected.title)
        Text(codeDetected.value)
        TextField("title", text: $codeDetected.title)
        TextField("value", text: $codeDetected.value)
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@Published 属性不触发任何内容 的相关文章

随机推荐

  • 在python中将ctypes结构转换为bytearray

    有没有办法转换 Ctypes 结构 包括指向字节数组的指针 class SRamAccess ctypes Structure fields channel ctypes c uint offset ctypes c uint len ct
  • CompletableFuture 循环中:如何收集所有响应并处理错误

    我正在尝试调用rest apiPUT循环请求 每个调用都是一个CompletableFuture 每个 api 调用都会返回一个类型的对象RoomTypes RoomType 我想收集响应 成功和错误 响应 在不同的列表中 我该如何实现这一
  • 在 Linux debian 中找不到捆绑命令

    当我进入bundle install我收到错误 bash bundle 找不到命令 如何查看是否安装了bundler gem 环境返回以下内容 RubyGems Environment RUBYGEMS VERSION 1 2 0 RUBY
  • 在 TextField Flutter 中垂直居中对齐文本

    我尝试查找大量资源 但不幸的是我找不到一种方法来将文本在文本字段中垂直居中对齐 我也尝试使用 suffixIcon 而不是 suffix 但仍然不走运 这是我的代码 import package flutter material dart
  • 如何生成 pandas 数据框行以触发数据框

    嗨 我正在转型 我已经创建了some function iter 发电机至yield Row id index api row api A row A B row B 生成从 pandas 数据帧到 rdd 和 Spark 数据帧的转换行
  • 用户和角色管理 MVC4

    我正在 MVC4 中编写一个定制的 Web 系统 该系统的一部分需要管理员用户来管理公司中的角色和用户 以提供对系统某些区域的访问和权限 该系统在系统中具有以下模块 销售量 生产 管理团队希望能够在系统中创建角色并向这些角色应用权限 例如
  • Android 动态数组列表首选项

    如何从 Java 端为 ListPreference 创建动态数组 我不使用下面的 Xml
  • 如何在单击后删除或禁用 onClick 事件侦听器? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在制作测验应用程序 我想在单击按钮后删除单击 我多次尝试更改代码但没有成功 我究竟做错了什么 class Quiz extends
  • dyld:找不到符号:_JNI_CreateJavaVM

    这个错误是什么意思 我需要做什么来解决它 我正在尝试为 node js 运行一个基于 java 的模块 具体来说 xslt4节点 https www npmjs com package xslt4node 在 Mac OS El Capta
  • 防止传递状态通知错误或电子邮件回复

    我有一个网络应用程序 L WAMP 它使用域 abc com 托管 客户使用 123 com 公司的应用程序 这意味着他们的电子邮件地址类似于 电子邮件受保护 cdn cgi l email protection or 电子邮件受保护 cd
  • 使用 NewtonSoft.JSON 序列化接口/抽象对象

    反序列化接口和抽象属性的一种方法是在序列化和反序列化期间将 TypeNameHandling 设置为 Auto 但是 当我直接序列化和反序列化接口对象时尝试相同的操作时 它不起作用 interface ISample string Key
  • 如何在swift中设置背景图片?

    我正在尝试用 swift 语言将搁浅图像设置到我的 ViewController 中 我正在使用以下代码 self view backgroundColor UIColor patternImage UIImage named bg png
  • Python 和 Selenium,从一个测试调用另一个测试

    请温柔地对待我 我不是程序员 刚刚开始使用 Selenium 做一些测试 我想做的是回收代码 所以我不必继续重复和维护它 所以我有以下内容 效果很好 from selenium import webdriver from selenium
  • 使用当前的 Powershell 凭据进行远程调用

    我有一个Powershell脚本 用于远程调用其他服务器上的其他Powershell脚本 该脚本用于关闭和启动不同服务器上的服务 Powershell 脚本的设置方式是这样的 我所要做的就是通过调用来调用它serverStartStop S
  • 为什么我必须继续使用“source ~/.profile”来获取设置?

    我有几个 bash 脚本 我想确保它们默认运行 目前我将它们存储在 profile在我的Mac上 这是存放它们的错误地方吗 我听说过其他人并尝试过它们 例如 bashrc bash profile等 但它们似乎不起作用 所有这些之间有什么区
  • 在提交模板中包含当前分支名称

    我为 git 设置了一个提交模板 我想在其中包含当前分支的名称 我通常将分支设置为 bug id 它会帮助我填写样板文件 例如 Bug BUG 如何使用 git 注释模板执行此类替换 我可能只会使用prepare commit msg ht
  • IIS 6.0 应用程序池崩溃

    在生产服务器上遇到很多麻烦 某些路由导致应用程序池崩溃 事件 ID 为 1011 事件类型 警告 事件来源 W3SVC 活动类别 无 事件ID 1011 日期 2009 年 1 月 21 日 时间 上午 9 08 17 用户 不适用 计算机
  • 当超级视图有手势时,collectionView没有调用didSelectItemAtIndexPath

    当superview有tapGesture时 collectionView没有调用didSelectItemAtIndexPath 这是为什么 为什么它根据响应者链打印 doGesture initCollectionView 然后添加到
  • 用户必须已接受 TOS - 将照片发布到群组页面时 Facebook Graph API 错误

    我一直在努力从用户的计算机上传图像并使用 Facebook Graph API 将图像发布到我们的群组页面 我能够向 facebook 发送带有图像的发布请求 但是 我收到此错误 错误 200 用户必须已接受 TOS 在某种程度上 我不认为
  • @Published 属性不触发任何内容

    我有这个协议 protocol MyProtocol ObservableObject var codeDetected CodeDetected get set var codeDetectedPublished Published