如果@EnvironmentObject如何创建通用?

2023-12-21

我最近遇到需要编写一个 MockClass,因为它会导致 SwiftUIpreview从工作中。不幸的是,我收到错误:

Property type 'T' does not match that of the 'wrappedValue' property of its wrapper type 'EnvironmentObject'

在视图结构中:

struct ContentView<T>: View {
    @EnvironmentObject var mockFoobar: T
    ...
}

还有错误:

Type of expression is ambiguous without more context

对于预览结构:

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        let mockFoobar: MockFoobar = MockFoobar()
        return ContentView<MockFoobar>()
            .environmentObject(mockFoobar)
    }
}

MockFoobar 类是:

class MockFoobar: ObservableObject {
  ...
}

正如用户@Asperi 善意提供的,按照建议测试了以下内容:

class Foobar: ObservableObject {
    @Published var param: Bool = false
    func start() {
        self.param = true
    }
}

struct MyFoobarView<T: ObservableObject>: View {
    @EnvironmentObject var foobar: T
    
    var body: some View {
        VStack {
            Text("Hello Foobar")
        }
        .onAppear {
            self.foobar.start()
        }
    }
}

struct MyFoobarView_Previews: PreviewProvider {
    static var previews: some View {
        let foobar: Foobar = Foobar()
        return MyFoobarView()
            .environmentObject(foobar)
    }
}

但我收到以下错误(第一个错误.onAppear第二个在 PreviewProvider 中):

Cannot call value of non-function type 'Binding<Subject>'

Generic parameter 'T' could not be inferred

EnvironmentObject 必须是 ObservableObject,所以这里是修复

struct ContentView<T: ObservableObject>: View {
    @EnvironmentObject var mockFoobar: T
    
    // .. other code here

Update:添加了引入模型协议的演示

protocol Foobaring {
    var param: Bool { get set }
    func start()
}

class Foobar: ObservableObject, Foobaring {
    @Published var param: Bool = false
    func start() {
        self.param = true
    }
}

struct MyFoobarView<T: ObservableObject & Foobaring>: View {
    @EnvironmentObject var foobar: T

    var body: some View {
        VStack {
            Text("Hello Foobar")
        }
        .onAppear {
            self.foobar.start()
        }
    }
}

struct MyFoobarView_Previews: PreviewProvider {
    static var previews: some View {
        let foobar: Foobar = Foobar()
        return MyFoobarView<Foobar>()
            .environmentObject(foobar)
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果@EnvironmentObject如何创建通用? 的相关文章

  • 架构armv7的重复符号

    尝试在我现有的应用程序中使用 Layar SDK 时出现以下错误 我该如何解决这个问题 Ld Users pnawale Library Developer Xcode DerivedData hub afxxzaqisdfliwbzxbi
  • ui 测试 xcode,如何使用 cellquery 点击表视图单元格按钮

    我目前正在为我的应用程序进行 ui 测试 并一直点击我的应用程序的登录按钮 我无法找到我提供了标识符注册按钮的元素 该元素是索引中的第三个 这不是问题 let cellQuery self app tables cells element
  • Xcode 存档上传失败并出现错误

    我正在尝试从 xCode 将新版本上传到 iTunesConnect 但每次我都会遇到此问题 问题是什么 我该如何解决这个问题 最近 我开始在上传过程中遇到问题 Xcode 经常卡住 最终会因您看到的第二个错误而失败 受够了一段时间后 我转
  • 我可以更改键盘方向吗?

    例如我用这段代码关闭自动旋转 BOOL shouldAutorotateToInterfaceOrientation UIInterfaceOrientation interfaceOrientation return NO BOOL sh
  • 将 Xcode 的测试类助理编辑器与 Swift 类结合使用

    在 Xcode 中工作时 在助理编辑器中提取单元测试用例通常会很好 目前 我一直在手动选择测试文件 但我看到助理编辑器有一个选项Test Classes 我试图让这个选项自动提取我的测试文件 但我似乎无法让它工作 是否需要某种配置 它不适用
  • Xcode 3.1.4 中内置分析器

    我想知道 Xcode 3 1 4 中内置的分析器是否使得单独使用 LLVM Clang 静态分析器变得多余 请参考这里的原文 使用 LLVM Clang 静态分析器查找内存泄漏 http www fruitstandsoftware com
  • 如何将音乐从我的应用程序切换到 iPod

    我在用MusicPlayerController我的应用程序中的对象来播放音乐 我知道当 iPhone ipod 应用程序终止时 可以继续播放我的应用程序音乐 我该怎么做 这涉及到一些事情 您必须在两种音乐播放器之间进行选择 应用程序音乐播
  • XCode 4.2.1 在 Lion 10.7.2 上启动时崩溃

    这周我买了大约 10 年来的第一台 Mac 是的 这是一台二手 Mac Pro 2x2GHz 双核 Xeon 2GB RAM 它全新安装了 Mac OS X Lion 10 7 2 我只安装了 OmniOutlner Pro Textmat
  • iPhone,如何隐藏标签栏按钮?

    如何隐藏单个标签栏按钮 我已经搜索过 但什么也没找到 只找到了完整的栏 我已经取得了一些进展 但仍然遇到问题 此代码位于我的应用程序委托中 带有选项卡栏的出口 我在其中调用它viewDidLoad选项卡栏中显示的第一个视图的视图 void
  • Obj-C / Swift 项目中的致命陷阱异常

    我开始将 Swift 代码集成到我的 Obj C 项目中 一切都进展顺利 但今天 当我更新到 Xcode 6 1 时 事情变得很糟糕 我从之前运行良好的 Swift 代码中收到了许多 陷阱 异常 第一次崩溃位于我的 UIFont 扩展中 这
  • 如何在 xcode 中使用相同的 nib 文件创建多个窗口

    我有一个使用表格视图作为界面的 iPhone 应用程序 每次用户点击其中一个表格单元格时 我想向用户显示另一个窗口 然而 我推入导航控制器的窗口的用户界面非常相似 因此 我决定制作一个 通用 nib 文件 以便在该通用 nib 文件的文件所
  • xcode 4 垃圾收集已删除?

    我正在学习 Xcode 和 Objective C 但是我正在阅读的书使用的是旧版本 3 2 的 Xcode 其中一章完全致力于内存和泄漏 说我需要通过 项目设置 gt 构建 打开垃圾收集 但是 我找不到垃圾收集设置 它已被删除还是我只是错
  • Xcode 中的目标、可执行文件和产品之间有什么区别

    在 Xcode 的 组和文件 面板下 目标 可执行文件和产品之间有什么区别 Target 定义如何构建产品 目标将构建产品所需的文件和指令组织成一系列可以采取的构建操作 Product 建立目标的结果 MyAppName app 换句话说
  • 简单的 iPhone 运动检测

    我需要检测陀螺仪 加速度计何时被激活一定量 基本上是检测设备何时移动 我对核心运动一无所知 也许有人可以指导我入门教程或其他东西 提前致谢 我认为你必须使用 Core Motion 好消息是 它对于您的问题域来说并不难使用 开始阅读事件处理
  • 在 WidgetKit 中每分钟更新时间文本标签

    是否可以在小部件中创建显示当前时间并实时更新的文本标签 尝试创建时钟小部件 但小部件每 5 分钟仅更新 1 次 创建时间表没有帮助 使小部件保持最新 不适用于当前时间 仅适用于计时器等 一个可能的解决方案是使用time日期样式 A styl
  • 如何使用 iconutil 手动创建 icns 文件?

    当我验证我的应用程序时 出现此错误 应用程序包不包含 ICNS 格式的图标 同时包含512x512 and a 512x512 2x image 我用来制作 icns 图标Img2icns http www img2icnsapp com
  • iOS-将图像转为视频时,CVPixelBufferCreate内存无法正确释放

    我正在将图像制作成视频 但总是因为内存警告而崩溃 分配太多CVPixelBufferCreate 我不知道如何正确处理 我看过很多类似的主题 但没有一个能解决我的问题 这是我的代码 void writeImagesArray NSArray
  • SwiftUI 检测用户何时截取屏幕截图或屏幕录制

    On UIViewController我们可以轻松地将观察者添加到控制器 喜欢 class ViewController UIViewController override func viewDidLoad super viewDidLoa
  • Xcode 服务器 ibtool 构建失败

    我一直在研究使用 Xcode Server 进行 CI 我已经解决了一些问题 但现在有一个问题困扰着我 构建似乎工作正常 但在测试阶段挂起 并在日志底部生成以下内容 2015 11 25 14 44 45 650 xcodebuild 58
  • AGVTool new-version 和 What-version 不对应

    当我做 agvtool new version all 99 它更新我的 Info plist 文件 但是 如果我这样做 agvtool what version or agvtool next version 我收到此错误 There d

随机推荐

  • Nuxt中间件无限重定向问题

    您好 我正在尝试在我的 Nuxt 3 应用程序中执行这个中间件 我正在尝试遵循文档 但收到无限重定向错误 export default defineNuxtRouteMiddleware to from gt const user id 1
  • python TypeError:“列表”对象不可调用错误

    我是 python 新手 我试图理解这里的一个基本错误 我在下面的代码中收到 TypeError list object is not callable 错误 有人可以解释一下我的代码有什么问题吗 graph a b c b a c c b
  • 通过 AKS 群集中的负载均衡器访问服务

    我配置了一个集群 其中的服务 及其相关的 Pod 容器 全部部署到私有子网中 其中一个 Pod 代表应用程序的 UI 我定义了一个具有公共 IP 的负载均衡器来提供对 UI 的访问 至少这是我的意图 当我在浏览器中输入包含负载均衡器 IP
  • Angular Js+ TypeScript:如何创建动态表

    我是打字稿和角度的新手 我已经使用打字稿和角度js实现了一个模块 在其中我需要创建一个动态表 它将获取演示文稿的类型并相应地附加到我的视图 就像我之前在 C 中所做的那样 我在下面给出了我的 c 代码 private void ShowCu
  • 需要均匀分布的按钮行

    我尝试使用 3 行和 4 列将所有按钮水平均匀地隔开 但失败了 垂直的就好 下面是 3 种不同的按钮间隔尝试 我的 3 行每行 1 种 第一行拉伸图形 这是不需要的 第二行不拉伸但没有间距 图形之间需要间距 而第三行拉伸没有任何间距 请帮我
  • 使用 IoC 进行单元测试

    如何使用 IoC 容器进行单元测试 使用 IoC 管理大型解决方案 50 多个项目 中的模拟是否有用 有什么经验吗 有哪些 C 库适合在单元测试中使用它 一般来说 单元测试不需要 DI 容器 因为单元测试就是分离职责 考虑一个使用构造函数注
  • Mongoose 在启动时调用 EnsureIndex,但不建议这样做。那么为什么它是默认的呢?

    我无法理解一件事 当我们读到猫鼬文档 http mongoosejs com docs guide html 当您的应用程序启动时 Mongoose 会自动调用ensureIndex对于架构中每个定义的索引 虽然有利于开发 但建议在生产中禁
  • 获取 Windows 中本地计算机用户名列表

    如何使用 C 获取 Windows 中本地计算机用户名列表 using System Management SelectQuery query new SelectQuery Win32 UserAccount ManagementObje
  • ggplot2直方图中每个方面的不同断点

    一个 ggplot2 挑战的 latticist 需要帮助 在直方图中请求变量每面中断的语法是什么 library ggplot2 d data frame x c rnorm 100 10 0 1 rnorm 100 20 0 1 par
  • 基本教师登录的用例图

    我正在创建一个非常基本的用例图来显示教师登录 该登录包括一个忘记密码 如果用户忘记密码 和一个重置密码 如果他们希望在登录后重置密码 我的问题是以下用例图表创建 尤其是包含和扩展 这确实是非常基本的 通常 登录宁愿成为其他用例的先决条件 而
  • 通过 C# 和 SMO 检查并删除现有表

    我正在尝试按名称查找 SQL 表 如果存在则删除它 这一切都需要使用 SMO 在 C 中完成 更复杂的是 该表还有一个 dbo 以外的模式 最终该表将通过 SMO 创建 我可以正常工作 但我必须确保它不存在 然后才能重新创建它 我看到的所有
  • 如何尽可能高效地将存储在 RDD 列中的多个 json 表“缩减”为单个 RDD 表

    使用以下代码在数据帧中使用联合来并发访问附加行是否可以正常工作 目前显示类型错误 from pyspark sql types import schema StructType StructField owreg StringType Tr
  • Laravel 'like' 查询与 MongoDB 连接

    我在 laravel like 查询中遇到问题 我在 laravel 上有一个 MIS 数据库在 MongoDb 上 现在我的数据库有一个名为kw带有 urlencoded 关键字 例如cars 20in 20London 现在我的查询给出
  • pandas 处理 numpy timedelta64[ms]

    gt gt gt import pandas as pd gt gt gt pd version 0 11 0 gt gt gt import numpy as np gt gt gt np version 1 7 1 gt gt gt d
  • 如何从Scala中的资源文件夹中读取文件?

    我有一个如下所示的文件夹结构 main java resources scalaresources commandFiles 在该文件夹中我有我必须阅读的文件 这是代码 def readData runtype String snmphos
  • 如何在 R 的 For 循环中正确使用 group_by() 和 summarise()

    我正在尝试计算一些摘要信息 以帮助我检查数据集中不同组中的异常值 我可以使用我想要的输出类型dplyr group by and dplyr summarise 包含给定变量的每个组的摘要信息的数据框 像这样的事情 Sepal Length
  • For 循环 gitlab-ci.yml

    我有这个代码片段 它给了我语法错误 意外的文件结尾 如果我将其复制到 sh 文件中并在终端中运行 它就可以工作 before script sbt sbtVersion for file in pending sql do file bas
  • 在快速枚举期间将对象设置为零[重复]

    这个问题在这里已经有答案了 我想在枚举数组时将对象设置为 nil 如下所示 for Object object in array object nil 然后 Xcode 告诉我 默认情况下 无法在 ARC 中修改快速枚举变量 声明变量 st
  • 多对多关系桥表困境

    salesman uId salesGroupLinked uId groupId add performacesScore field here group groupId 我上面有 3 个表 形成了多对多关系 我会添加一个字段 perf
  • 如果@EnvironmentObject如何创建通用?

    我最近遇到需要编写一个 MockClass 因为它会导致 SwiftUIpreview从工作中 不幸的是 我收到错误 Property type T does not match that of the wrappedValue prope