SwiftUI 双向绑定到枚举案例中 ObservableObject 内的值

2024-05-02

我正在尝试观察 a 的变化bool包含在一个值ObservableObject这是一个值enum案件。这是我想要实现的目标的示例,但使用当前的方法我收到错误Use of unresolved identifier '$type1Value'.

import SwiftUI
import Combine

class ObservableType1: ObservableObject {
    @Published var isChecked: Bool = false
}

enum CustomEnum {
    case option1(ObservableType1)
}

struct Parent: View {
    var myCustomEnum: CustomEnum
    var body: AnyView {
        switch myCustomEnum {
        case .option1(let type1Value):
            AnyView(Child(isChecked: $type1Value.isChecked)) // <- error here
        }
    }
}

struct Child: View {
    @Binding var isChecked: Bool
    var body: AnyView {
        AnyView(
            Image(systemName: isChecked ? "checkmark.square" : "square")
            .onTapGesture {
                self.isChecked = !self.isChecked
        })
    }
}

我正在尝试更新的值isChecked从界面但因为我想要ObservableObject其中包含属性enum like CustomEnum不知道该怎么做或者是否可能。我选择了枚举,因为会有多个不同的枚举选项ObservableObject价值观和Parent会根据不同的情况生成不同的子视图CustomEnum选项。如果它有任何相关性Parent将收到myCustomEnum值来自Array of CustomEnum价值观。这可能吗?如果没有,我还有什么选择?谢谢你!


好吧,永远不要说永远......我已经为这种情况找到了有趣的解决方案,它甚至允许删除 AnyView。使用 Xcode 11.4 / iOS 13.4 进行测试

提供完整的可测试模块,以防万一。

// just for test
struct Parent_Previews: PreviewProvider {
    static var previews: some View {
        Parent(myCustomEnum: .option1(ObservableType1()))
    }
}

// no changes
class ObservableType1: ObservableObject {
    @Published var isChecked: Bool = false
}

// no changes
enum CustomEnum {
    case option1(ObservableType1)
}

struct Parent: View {
    var myCustomEnum: CustomEnum

    var body: some View {
        self.processCases() // function to make switch work
    }

    @ViewBuilder
    private func processCases() -> some View {
        switch myCustomEnum {
        case .option1(let type1Value):
            ObservedHolder(value: type1Value) { object in
                Child(isChecked: object.isChecked)
            }
    }
}

// just remove AnyView
struct Child: View {
    @Binding var isChecked: Bool
    var body: some View {
        Image(systemName: isChecked ? "checkmark.square" : "square")
            .onTapGesture {
                self.isChecked = !self.isChecked
            }
    }
}

这是一名组织者

struct ObservedHolder<T: ObservableObject, Content: View>: View {
    @ObservedObject var value: T
    var content: (ObservedObject<T>.Wrapper) -> Content

    var body: some View {
        content(_value.projectedValue)
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SwiftUI 双向绑定到枚举案例中 ObservableObject 内的值 的相关文章

  • 如何动态获取 UITableViewCell 的高度

    我创建了自定义的tableViewCell 我在UITableViewCell中添加了UIView SubView 所以我在 UIView 中的所有动态文本和图像内容都会根据文本和图像大小而变化 但现在 HeightforRowAtInde
  • 错误消息:您输入的捆绑包 ID 已被使用

    我正在尝试发布一个 iPhone 应用程序 这不是第一个 我过去已经发表过其他的 因此 我在第一个和第二个表单中输入了所需的信息 然后填写了第三个大表单 您还可以在其中上传图标和屏幕截图 好吧 我在上传屏幕截图之前按下了 保存 按钮 因为我
  • ListView ItemContainerStyle 模板

    我创建了用作 ListView 项目模板的样式 其中包含 CheckBox 和 TextBlock
  • 如何使用 alamofire 通过基本身份验证上传图像?

    我正在尝试使用 alamofire 4 7 1 和此代码上传图像 但说实话 我怀疑我没有编写正确的代码来上传图像 func uploadDefect defectRemark String defectLocation String def
  • 从未调用过交互式委托方法

    我想在 ViewController 1 和 NavigationViewController 2 之间进行交互式转换 NavigationController 通过按钮调用 因此呈现时没有交互转换 它可以通过按钮或 UIPanGestur
  • iPhone X 将对象底部与安全区域对齐会破坏其他设备上的外观

    关于 iPhone X 自动布局怪癖的问题 我有两个按钮 以前这些按钮将与超级视图底部对齐 偏移量为 20 以免它们接触屏幕底部 此后我将链接更改为安全区域而不是超级视图 Here s the original setup Looks go
  • 有没有办法在 Firebase 中等待查询完成?

    我正在使用 TableView 在 Viewcontroller 中的 iOS 应用程序中进行查询 我想确保在继续加载 TableView 之前我的查询已经返回 有没有办法保证查询已经完成 None
  • 在 iOS 7 中 viewForHeaderInSection 部分是从 1 开始而不是从 0 开始

    我正在处理UITableView在我的项目中 这个项目是在 Xcode 4 5 中创建的 现在我正在使用 Xcode 5 所以我的问题是何时在 iOS 6 中运行我的项目 viewForHeaderInSection方法部分从 0 开始没问
  • 如何在 iOS 13 中将 UISegmentedControl 的背景颜色设置为白色

    iOS 13 对 UISegmentedControl 进行了一些更改 包括切换所选片段时的非常漂亮的动画 但是我注意到它没有显示backgroundColor属性正确 它似乎总是有一点色彩 我见过回答如何设置的问题selectedSegm
  • $0 和 $1 在 Swift 闭包中意味着什么?

    let sortedNumbers numbers sort 0 gt 1 print sortedNumbers 谁能解释一下什么 0 and 1在斯威夫特中意味着什么 另一个样本 array forEach actions append
  • 使用数组中的字符串淡入/淡出标签

    func setOverlayTitle self overlayLogo text Welcome var hello String Bon Jour GUTEN nMORGEN BONJOUR HOLA BUENOS D AS BUON
  • 如何删除 UITableView 中的缩进?

    首先 我对此很陌生 我很可能忘记了一些非常简单的事情 问题 我正在制作一个应用程序 在 a 中显示来自 imgur com 的随机图像tableView 由于某种原因 所有单元格都会缩进少量 如下图所示 我摆弄了许多设置storyboard
  • SwiftUI:隐藏键盘但显示光标

    我想使用自定义按钮将文本输入到TextField 但仍显示并移动光标 有没有办法隐藏默认键盘 同时仍然显示光标 我希望有这样的事情 TextField text text keyboardType none 这是它目前的样子 您可以使用UI
  • AVAudioPlayer 无法从网站播放 m4a 或 mp3 文件类型

    我试图在我的应用程序中找到一个仅纯 m4a 声音的 URL 我有音频的 URL 理论上可以下载它 然后 使用下载的文件URL到声音 我尝试使用AVAudioPlayer播放它 但它不播放任何声音 这是我的代码 在 URL 检索函数中 我调用
  • 使用 UITabBarController 时覆盖整个屏幕的视图?

    我想在 UITabBarController 设置中在整个屏幕上覆盖 HUD 样式的透明图形 执行此操作的按钮位于第一个选项卡的屏幕 FirstViewController 中 并且覆盖层也应该覆盖选项卡 这可能吗 您可以将新视图直接附加到
  • Xcode 异步单元测试在主线程上等待

    我正在尝试使用 Xcode 中的单元测试来测试一些异步代码 但主线程被阻塞 问题在于 某些正在测试的代码期望从 iOS 类 AVFoundation 接收回调 但是 AVFoundation 类似乎只会在主线程上回调 问题是 如果我正在进行
  • 上传存档错误:“缺少 iOS 发行版签名身份......”

    我正在尝试使用 Xcode 将我的 iOS 应用程序存档上传到 iTunes Connect 但是当我单击 上传到 App Store 时 出现错误 Xcode 尝试查找或生成匹配的签名资产并 由于以下问题未能做到这一点 缺少 iOS 为
  • 致命错误:在 Swift 中解包可选值时意外发现 nil

    所以我试图获取 Swift 中输入字段的文本 这就是我得到的 class ViewController UIViewController IBOutlet var passwordField UITextField IBOutlet var
  • 如何在 UITableView 的 switch 语句中创建变量?

    我正在构建一个包含三个部分的 tableView 我已经完成了前两个工作 但最后一个有点阻力 我的问题似乎涉及尝试在 switch 语句中声明变量 实际上是嵌套的 switch 语句 据我所知 这不是一个好主意 但在这种情况下 这似乎是唯一
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • Javascript:除了“use strict”之外,还有哪些其他“use”指令?

    Besides use strict 还有哪一个use有指令吗 指令序言 JavaScript 引擎可能使用的部分 中还有一些示例 use strict use asm 莫斯拉的asm js http asmjs org 是该语言的一个子集
  • 存储应用程序配置设置

    在 AngularJS 中存储应用程序配置设置的最佳位置是什么 这可能是应用程序常量 查找等 可以从控制器和服务或工厂使用 我可以创建一个单独的服务来存储和检索这些东西 但我想知道是否有另一个合适的地方来存储和检索这些东西 您可以使用持续的
  • 如何检测 iPhone 中按下的键盘按键?

    我想检测用户何时按下任何键盘键 仅在键入任何字符时调用的任何方法 而不是在显示键盘时调用的方法 Thanks 您可以在用户每次按键时直接处理键盘事件 Swift 对于文本字段 请使用以下委托方法 func textField textFie
  • 为什么我的 Visual Studio .obj 文件比输出的 .exe 文件大?

    作为背景 我是一个开源项目的开发人员 一个名为开放框架 http www openframeworks cc 这是不同库的包装器 例如 opengl quicktime freeImage 等 在下一个版本中 我们添加了一个名为 POCO
  • 在内核 OpenCL 中实现 FIFO 的最佳方法

    目标 在 OpenCL 中实现下图所示 OpenCl 内核所需的主要内容是将系数数组和临时数组相乘 然后最后将所有这些值累加为 1 这可能是最耗时的操作 并行性在这里非常有帮助 我正在为内核使用一个辅助函数来执行乘法和加法 我希望这个函数也
  • 限制文本框中每行的最大字符数

    假设我有以下内容
  • 如何创建“抽象字段”?

    我知道java中不存在抽象字段 我也读过这个问题 https stackoverflow com questions 2211002 why not abstract fields但提出的解决方案并不能解决我的问题 也许没有解决方案 但值得
  • 确定性时的虚函数开销 (c++)

    我知道虚拟函数本质上是包含在 vtable 中的函数指针 这使得多态调用由于间接等原因而变慢 但我想知道当调用是确定性时编译器的优化 我所说的确定性是指以下情况 该对象是一个值而不是引用 因此不可能存在多态性 struct Foo virt
  • Tensorflow:np数组的next_batch函数

    我的火车数据为 xTrain numpy asarray 100 1 5 6 yTrain numpy asarray 200 2 10 12 如何定义 next batch size 方法以从训练数据中获取随机元素的 size 个数 您可
  • 在 numpy 中索引多个不相邻的范围

    我想从一维 numpy 数组 或向量 中选择多个不相邻的范围 Suppose gt gt gt idx np random randint 100 size 10 array 82 9 11 94 31 87 43 77 49 50 当然
  • 自动订阅应用内购买:恢复后续续订

    根据 Apple 应用内购买编程指南 App Store 每次续订订阅时都会创建一个单独的交易 当您的应用程序恢复以前的购买时 Store Kit 会将每笔交易传送到您的应用程序 假设我的应用程序订阅仅限客户端 无服务器组件 验证后续续订是
  • { [FacebookTokenError:此授权码已被使用。]

    我有一个航行应用程序 我正在尝试实现 Facebook 登录 当我单击 使用 facebook 登录 按钮时 出现此错误 error A server error occurred in a request error FacebookTo
  • PHP cURL:CURLOPT_CONNECTTIMEOUT 与 CURLOPT_TIMEOUT

    PHP 有以下两个与超时相关的选项 CURLOPT CONNECTTIMEOUT and CURLOPT TIMEOUT PHP 网站上的描述有点模糊 有什么不同 使用现实世界的示例 假设您通过 cURL 将 GET 变量发送到 URL 并
  • 有没有办法理解安装错误代码的实际含义?

    我正在尝试应用内更新功能 但收到 FAILED 安装状态和 100 安装错误代码 有什么办法让我知道可能是什么原因造成的吗 我实现了灵活的应用内更新 并记录了每个步骤 遵循 Android 开发者教程here https developer
  • jQuery 自动完成标记插件,如 StackOverflow 的输入标记? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 哪些解决方案可以实现与 SO 用于输入标签相同的自动完成功能 有可以处理一个单词的插件 但我还没有看到
  • 需要从表单生成的工作表中移动行

    我有一个调查表 我需要我的团队查看一次 但之后我希望我的团队将其设置为 已关闭 的行保存到存档表中 过去 我在其他工作表中使用过此脚本 但它似乎不适用于表单链接工作表 经过研究 我发现您无法从表单链接表中剪切 但可以删除行 我的理论是脚本正
  • 当implicitly_wait不起作用时使用find_element_by_link_text出现NoSuchElement异常?

    python 和 Selenium 以及相关编程的新手 我正在尝试自动化硒以点击特定链接 在本例中 我希望它点击与链接文本 B 关联的链接 li a href B a 在这个网站上 http www lw com http www lw c
  • Azure 中的 ASP.NET MVC 4 和 Web API - 未找到 HTTP 资源

    使用 Visual Studio 2012 我创建了一个简单的 Windows Azure 项目 云项目 其中包含 ASP NET MVC 4 网站 我没有对模板进行任何更改 我只是尝试使用Azure 网站 https www window
  • 在 Laravel 5.1 中将模型保存到数据库之前执行一些操作

    在 Laravel 5 1 模型中 在将数据写入数据库之前 我该如何做一些事情 例如修改某些数据字段或进行更多验证 关于该问题的文档很难在实际应用中使用 http laravel com docs 5 1 eloquent events h
  • SwiftUI 双向绑定到枚举案例中 ObservableObject 内的值

    我正在尝试观察 a 的变化bool包含在一个值ObservableObject这是一个值enum案件 这是我想要实现的目标的示例 但使用当前的方法我收到错误Use of unresolved identifier type1Value im