在两个视图之间传递数据

2024-01-08

我想在 watchOS 6 上创建一个安静的简单应用程序,但是在 Apple 更改了 Xcode 11 beta 5 中的 ObjectBindig 后,我的应用程序不再运行。我只是想在两个视图之间同步数据。

所以我用新的@Published重写了我的应用程序,但我无法真正设置它:

class UserInput: ObservableObject {

    @Published var score: Int = 0
}

struct ContentView: View {
    @ObservedObject var input = UserInput()
    var body: some View {
        VStack {
            Text("Hello World\(self.input.score)")
            Button(action: {self.input.score += 1})
                {
                    Text("Adder")
                }
            NavigationLink(destination: secondScreen()) {
                Text("Next View")
            }

        }

    }
}

struct secondScreen: View {
    @ObservedObject var input = UserInput()
    var body: some View {
        VStack {
            Text("Button has been pushed \(input.score)")
            Button(action: {self.input.score += 1
            }) {
                Text("Adder")
            }
        }

    }
}

您的代码有几个错误:

1)你没有把你的ContentView in a NavigationView,所以两个视图之间的导航从未发生过。

2)您以错误的方式使用了数据绑定。如果您需要第二个视图依赖于属于第一个视图的某些状态,则需要将该状态的绑定传递给第二个视图。在您的第一个视图和第二个视图中,您都有一个@ObservedObject内联创建:

@ObservedObject var input = UserInput()

因此,第一个视图和第二个视图适用于两个完全不同的对象。相反,您有兴趣分享score观点之间。让第一个视图拥有UserInput对象,只需将分数整数的绑定传递给第二个视图。这样,两个视图都将使用相同的值(您可以复制粘贴下面的代码并自行尝试)。

import SwiftUI

class UserInput: ObservableObject {
    @Published var score: Int = 0
}

struct ContentView: View {
    @ObservedObject var input = UserInput()
    var body: some View {
        NavigationView {
            VStack {
                Text("Hello World\(self.input.score)")
                Button(action: {self.input.score += 1})
                    {
                        Text("Adder")
                    }
                NavigationLink(destination: secondScreen(score: self.$input.score)) {
                    Text("Next View")
                }

            }
        }

    }
}

struct secondScreen: View {
    @Binding var score:  Int
    var body: some View {
        VStack {
            Text("Button has been pushed \(score)")
            Button(action: {self.score += 1
            }) {
                Text("Adder")
            }
        }

    }
}

#if DEBUG
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
#endif

如果你真的需要它,你甚至可以通过整个UserInput反对第二种观点:

import SwiftUI

class UserInput: ObservableObject {
    @Published var score: Int = 0
}

struct ContentView: View {
    @ObservedObject var input = UserInput() //please, note the difference between this...
    var body: some View {
        NavigationView {
            VStack {
                Text("Hello World\(self.input.score)")
                Button(action: {self.input.score += 1})
                    {
                        Text("Adder")
                    }
                NavigationLink(destination: secondScreen(input: self.input)) {
                    Text("Next View")
                }

            }
        }

    }
}

struct secondScreen: View {
    @ObservedObject var input: UserInput //... and this!
    var body: some View {
        VStack {
            Text("Button has been pushed \(input.score)")
            Button(action: {self.input.score += 1
            }) {
                Text("Adder")
            }
        }

    }
}

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

在两个视图之间传递数据 的相关文章

  • 在 SwiftUI 中使用获取视图的宽度

    我需要获取渲染视图的宽度SwiftUI 这显然没那么容易 我的看法是 我需要一个返回视图尺寸的函数 就这么简单 var body some View VStack alignment leading Text timer name font
  • Xcode 11 向后兼容性:“UIWindowScene 仅在 iOS 13 或更高版本中可用”

    在 Xcode 11 中 我从 Single View App 模板创建了一个新的应用程序项目 我希望这个应用程序能够在 iOS 12 和 iOS 13 中运行 但是当我将部署目标切换到 iOS 12 时 我收到了很多类似这样的错误消息 U
  • 如何将一个 SwiftUI View 作为变量传递给另一个 View 结构

    我正在实施一个very自定义 NavigationLink 称为MenuItem并希望在整个项目中重用它 它是一个符合以下条件的结构体View并实施var body some View其中包含一个NavigationLink 我需要以某种方
  • SwiftUI - SwiftUI 中有等效的 popViewController 吗?

    我正在使用 SwiftUI 希望在点击按钮时能够返回到之前的视图 与我们使用的相同popViewController里面一个UINavigationController 到目前为止有提供的方法吗 我也尝试过使用NavigationDesti
  • 我想为 TabBar 设置背景

    I don t know how to change the background of the TabBar by an Image I try to change the background of TabBar not try to
  • 如何在 SwiftUI 中呈现视图而不将其嵌入到当前导航流中?

    我已经完成了日志记录入门 并且需要呈现一个 HomeView 它对之前的导航流程一无所知 var body some View if viewModel isValidated destination else LoadingView 通过
  • Xcode 11 beta swift ui 预览未显示

    只是使用 Swift UI 基本应用程序 即使我处于画布模式 预览画布也不会显示 应用程序运行 我有这个小片段 我错过了什么 if DEBUG struct ContentView Previews PreviewProvider stat
  • SwiftUI Nested ForEach 导致致命错误:每个布局项只能出现一次

    我正在尝试创建一个 LazyVGrid 视图来使用嵌套的 ForEach 语句显示数组中对象的内容 该代码导致应用程序崩溃 并显示消息 致命错误 每个布局项只能出现一次 每个对象都包含一个值数组 需要在网格中显示为一行 该行由包含对象 sk
  • 如何使 SwiftUI 列表行背景颜色扩展整个宽度,包括安全区域之外

    在 SwiftUI 中List 如何制作列表行背景 通过设置 listRowBackground 扩展视图的整个宽度 甚至在安全区域下方 例如 在宽屏 iPhone 例如 iPhone 12 Pro Max 上横向运行时 目前 该单元格在安
  • ScrollView 内的 GeometryReader 会折叠 GeometryReader,无论子尺寸如何

    我正在尝试创建一个包含绘图的子视图 我希望该绘图的大小与父容器的一部分成比例 除非将其放入层次结构上方的滚动视图中 否则效果很好 从屏幕截图中可以看出 堆栈内部的声音正如预期的那样最大 但是 当您放入滚动视图时 几何读取器的大小会折叠到接近
  • SwiftUI 中的计算 (NSObject) 属性不会更新视图

    所以 我想要一个Text它根据我的 CoreData 模型的内容更改其内容 为此 我在 Xcode beta 4 中使用了计算属性 但它似乎不再起作用了 这是一个错误还是还有其他我没有看到的问题 我真正遇到的问题是我的视图 和计算的属性 似
  • SwiftUI 有模糊背景的方法吗?

    我希望模糊视图的背景 但不想必须突破 UIKit 才能完成它 例如 UIVisualEffectView 我正在翻阅文档却一无所获 似乎没有办法实时剪辑背景并对它应用效果 我错了还是以错误的方式看待它 1 Native SwiftUI方式
  • 更改 RealityKit 中 AnchorEntity 的旋转

    我在放置对象 3 秒后将 3d 对象放置到 ARViewController 中 然后我想将对象旋转 90 度 arView scene addAnchor anchorEntity DispatchQueue main asyncAfte
  • tvOS + SwiftUI 在部分之间聚焦

    我已经设置了一个非常简单的 SwiftUI tvOS 应用程序 我在使用 Focus 引擎时遇到了困难 当应用程序启动时 它的重点是 启动 这是可以理解的 向下滑动 转到 StackView 在项目上向左 向右滑动效果很好 但无论我在哪里尝
  • SwiftUI:获取动态背景颜色(深色模式或浅色模式)

    有没有一种方法可以系统地访问 SwiftUI 视图的标准动态背景颜色 无论用户处于浅色模式还是深色模式 例如 我知道以下内容可用于获取主要 例如文本 颜色 let textColor Color primary 但我没有看到任何类似的背景颜
  • SwiftUI 列表与右侧的部分索引?

    是否可以有一个在右侧有索引的列表 就像下面 SwiftUI 中的示例一样 我在 SwiftUI 中做了这个 Contacts swift TestCalendar Created by Christopher Riner on 9 11 2
  • SwiftUI 意外地自动弹出 NavigationLink

    我有一个简单的用例 其中一个屏幕使用 NavigationLink 推送另一个屏幕 iOS 14 5 有一个奇怪的行为 即推送的屏幕在被推送后立即弹出 Code NavigationLink destination EmptyView Em
  • 如何在 iOS 13 中将 UISegmentedControl 的背景颜色设置为白色

    iOS 13 对 UISegmentedControl 进行了一些更改 包括切换所选片段时的非常漂亮的动画 但是我注意到它没有显示backgroundColor属性正确 它似乎总是有一点色彩 我见过回答如何设置的问题selectedSegm
  • 如何在 iPhone 上使用 SwiftUI 显示表格数据?

    我正在为当地的体育联盟开发一个应用程序 一个视图将是当前排名 每行有几个字段 球队名称 已玩的比赛 得分等 我希望球队列左对齐 其他列右对齐 似乎最好的答案是 SwiftUI 的 Table 但在 iPhone 上 它只显示第一列 我尝试过
  • 在 SwiftUI 中使用可观察对象切换视图

    我正在练习尝试使用 SwiftUI 中的可观察对象切换视图 但我的代码无法正常工作 我知道我可以用 State 来做到这一点 但我想用可观察的对象来实现这一点 当我单击内容视图中的图像时 图像不会改变 有人能帮我吗 内容视图 swift i

随机推荐

  • 在 Jenkins 中找不到私有 git 子模块

    问题 我正在尝试在 Jenkins 中构建我的应用程序 它位于 Github 上的私有存储库上 还有一个私有子模块 我可以通过设置凭证来克隆 Jenkins 中的私有存储库 但 Jenkins 无法克隆子模块 这是失败构建的输出 Start
  • 如何在 MySQL 中将字符串列读取为列表?

    我有一张桌子 它有两列class id and student 学生列是学生列表 学生列的数据类型是varchar 我想编写一个 SQL 查询 返回行 其中学生列是较大列表的子集 例如 A B C D E F G class id stud
  • Moodle 中个人资料图片的路径?

    我正在 Moodle Web 应用程序中编程一些东西 并正在考虑检索用户个人资料图像的路径 我以为我可以在数据库中的某个位置找到路径 但我只找到 mdl user picture 和 mdl user imagealt 所以实际上我知道谁上
  • 便携式图书馆中的计时器

    我在便携式库 Windows 应用商店中找不到计时器 针对 net 4 5 和 Windows Store aka Metro 有人知道如何创建某种计时事件吗 我需要某种秒表 所以应该每秒刷新一次左右 Update 我们已在 Visual
  • Flutter 应用在​​ Android 12 上启动时崩溃

    我在 Google Play 上发布了一个应用程序 并且经常使用 在上次更新中 我将compileSdkVersion和targetSdkVersion都发布到了31 我发现 Android 版本低于 12 的用户在使用应用程序时没有任何问
  • 仅从某些 Cassandra 分区检索数据时,Spark (Scala) 中的 DataFrames 是否有 joinWithCassandraTable 的替代方案?

    当使用 RDD 从大型 C 表中提取少量分区时 我们可以使用 val rdd rdd including partition data val data rdd repartitionByCassandraReplica keyspace
  • 3D 的 imshow 吗? (Python / Matplotlib)[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 当所有表达式都缺失时,C# for 循环会做什么。例如 for(;;) {}

    我只能假设这是一个无限循环 我可以省略 for 循环中的三个表达式中的任何一个吗 省略时每个都有默认值吗 是的 这是一个无限循环 例子 for 又名 螃蟹 while true do while true
  • Pandas 自定义函数来查找是否是第一、第二等星期一、星期二等 - 欢迎所有建议

    所以我有以下代码 它读取 5 列 日期 ohlc 然后 它创建一个列 dow 来保存星期几 到目前为止 一切都很好 import numpy as np import pandas as pd df pd read csv content
  • 错误(10028):无法解析网络的多个常量驱动程序... VHDL 错误

    我正在尝试编写一个代码来检测 din 信号的上升沿 并在发生后将 doout 提高 5 个时钟周期 我在编译时不断收到不同的错误 但我不确定它们的含义 我认为我对 VHDL 中的一些概念缺乏基本的了解 但遗憾的是在网上查找并没有给我带来太大
  • 找到章节的最大深度

    每个人 在这种情况下 我想计算章节的最大深度 例如 一本没有章节的书的高度为 0 一本书只有章节没有章节 高度应该为1 以下是xml
  • 无法使用mysql中的数据库(未知数据库)

    我正在尝试开始使用以下 github 包 py gameday https github com wellsoliver py gameday 我安装了 mysqlbrew mysql并创建了 root 密码 gt mysqladmin u
  • 使用opencv,如何去除透明图像中的非对象?

    我是图像处理方面的新手 我正在尝试调整透明图像中绑定对象的矩形 框架的大小 但我不知道怎么做 请帮我 非常感谢 P s 它不会与作物重复 在裁剪中 您修复了一个元组 从 x y w h 裁剪 但在我的照片中 我不知道在哪里裁剪 我们需要首先
  • 跳过foreach淘汰赛js数组中的项目?

    我有一个关于淘汰赛 js 中的 foreach 和第一项的问题 我想跳过第一个并迭代下一个项目 主要问题是我想做这样的事情 div div div div div div 我不认为 knockoutJS 提供了跳过数组中特定元素的功能 但您
  • 在PYTHON中将列表打印到不带[括号]的txt文件

    我正在尝试获取姓名列表 按字母顺序排列并将它们打印到新列表中 这是我的代码 names newnames with open C names txt r as infile for row in infile readlines name
  • 为什么C中的const指针可以修改?

    今天我尝试使用const标识符 但我发现const变量仍然可以修改 这让我很困惑 以下是代码 在compare const void a const void b 函数中 我尝试修改该值a指向 include
  • TSQL 四舍五入到小数点后半位

    我想四舍五入到最接近的半个小数 地理坐标 以进行一些数据可视化 在 t sql 中 是否有一个内置函数可以四舍五入到小数点后一半 如果是这个术语 期望结果的示例 1 1 gt 1 0 1 4 gt 1 5 1 6 gt 1 5 1 9 gt
  • 第二次打开时进度条没有重置为“0”

    在 Android 应用程序中 我在单独的线程中运行任务 当线程运行时 它会更新主窗口中的进度条 让用户知道发生了什么 问题是 如果用户第二次启动线程 进度条将不会重置 它只会保持 100 状态而不执行任何操作 整个源码是可以在 githu
  • Hoxton.SR6 与 Spring Boot 2.3.0 导致奇怪的内容类型问题

    当我将 Spring Boot 2 3 0 RELEASE 应用程序从 Hoxton SR4 更新到 Hoxton SR6 唯一的更改 时 我开始面临来自各个端点的内容类型的奇怪问题 例如 对于 Hoxton SR4 任何未经授权的端点都会
  • 在两个视图之间传递数据

    我想在 watchOS 6 上创建一个安静的简单应用程序 但是在 Apple 更改了 Xcode 11 beta 5 中的 ObjectBindig 后 我的应用程序不再运行 我只是想在两个视图之间同步数据 所以我用新的 Published