首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

数组更改时SwiftUI列表不更新

在SwiftUI中,当数组发生更改时,列表(List)默认情况下不会自动更新。这是因为SwiftUI使用了值语义,即当数组的值发生更改时,SwiftUI无法检测到具体的更改操作。

要解决这个问题,可以使用SwiftUI中的@State属性包装器来创建一个可观察的状态变量。当数组发生更改时,通过更改状态变量的值来触发列表的更新。

下面是一个示例代码:

代码语言:txt
复制
import SwiftUI

struct ContentView: View {
    @State private var items = ["Item 1", "Item 2", "Item 3"]

    var body: some View {
        List(items, id: \.self) { item in
            Text(item)
        }
        .onAppear {
            DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
                self.items.append("Item 4")
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

在这个示例中,我们使用了@State属性包装器来创建一个可观察的状态变量items,并将其用作列表的数据源。当items数组发生更改时,列表会自动更新。

onAppear闭包中,我们使用了DispatchQueue.main.asyncAfter方法来模拟数组的更改。在2秒后,我们向items数组中添加了一个新的元素。

这样,当数组发生更改时,列表会自动更新,显示新添加的元素。

推荐的腾讯云相关产品:腾讯云云服务器(CVM),产品介绍链接地址:https://cloud.tencent.com/product/cvm

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

dotnet 申请额外数组空间合并多个只读数组列表

本文写了一个简单的方法,通过判断下标的方法做遍历多个数组组合在一起,通过判断当前获取的下标在对应哪个数组下标范围内,返回对应数组的元素 合并多个数组列表有多个不同的方法,但是我找到的方法都需要额外申请内存空间...,需要做一次数组元素复制,相对性能比较差,如果是做只读,功能和 Span 相反,那么可以通过遍历的数组下标判断 下面方法可以在项目用,做法很简单,看代码也就知道 using System; using...} throw new IndexOutOfRangeException(); } } } 这个类如果不算传入的只读列表的原列表的更改...,这个类是线程安全的 可能遇到的坑是传入的只读列表的原列表添加了值,也就是 CombineReadonlyList[n] 执行两遍获取的元素可能不相同 更多有趣的数组定义请看 Sakuno.Base.Collections...GetEnumerator(); } public int Count => Source.Sum(temp => temp.Count); } ---- 本文会经常更新

1.1K20

AnyView 对 SwiftUI 性能的影响

这也是预期的,因为 SwiftUI 知道视图的标识和结构。当需要更新视图时,仅对其进行更改(例如,向视图添加另一个反应)。...通过使用 AnyView,效果类似于将 id 修饰符的值设置为 UUID() - 这将在发生更改时始终更新视图项目。...为了更好地理解结果,我们需要深入了解 SwiftUI 的工作原理。在这个关于 SwiftUI 性能的 WWDC 会话中,来自 SwiftUI 团队的 Raj 讨论了列表或表需要提前知道所有标识符。...这意味着,当列表发生更改时,我们实际上重新创建了整个列表。这也解释了为什么 AnyView 实现随着时间的推移变慢 - 每次重绘时都需要从头开始创建更多内容。...总结总而言之,在这些情景中(包含异构视图的可滚动列表),最好为容器中的不同视图使用具体类型。这可能听起来复杂一些,但实际上你可以使其简单,而不必过多地处理泛型。

9700

Ask Apple 2022 与 SwiftUI 有关的问答(下)

SwiftUI 4.0 的 Form 在 Ventura 上的表现与以往版本有很大的不同。形式上接近 iOS 的状态,同时也对 mac 进行了更多的适配。...在复杂的 UI 中,由于视图的更新速度过快,性能( 至少在 macOS 上 )迅速下降。A:有不同的策略。ObservableObject 是使视图或视图层次结构的失效( 引发重新计算 )的单元。...快速检索数组元素Q:为什么没有简单的方法将 TABLE 选择的行映射到提供表内容的数组元素上?似乎唯一的方法是在数组中搜索匹配的 id 值,这对于大表来说似乎效率很低。...我建议尝试旋转滚动视图。Swiftcord[12] 的代码展示了如何在 SwiftUI 下实现倒置列表。...阅读 优化在 SwiftUI List 中显示大数据集的响应效率[13] 一文,了解苹果工程师推荐的方法。在两种方案中,如果在数据量很大的情况下,我倾向于第一种方式,这样可以按需求读取数据。

14.8K30

架构之路 (五) —— VIPER架构模式(一)

因此,它们只保存数据,包含任何功能逻辑。 在Data Sources组中,有用于保存或加载数据的辅助函数。 如果您喜欢在WaypointModule组中查看前面的内容。...通过使用@Published属性包装器声明它,视图将能够监听属性的变化并自动更新自身。 下一步是将此列表与来自interactor的数据模型同步。...$name } 这只公开了旅行名称的String版本,以及当该名称更改时的的Publisher。...这个widget比其他的复杂。 除了绘制地理特征,该应用还会覆盖每个点的大头针pins和它们之间的路线。 这需要它自己的一组presentation逻辑。...然后将directions复制到routes数组。 要使用presenter,创建一个名为TripMapView.swift的SwiftUI View。

17.4K10

SwiftUI 之 HStack 和 VStack 的切换

所有这些仍然使用紧凑垂直布局,它使用的空间超过渲染其内容所需的空间。...Xcode 14 的一部分仍在测试阶段) 其中一个工具是新的 Layout 协议,它既能让我们创建完整的自定义布局,直接集成到 SwiftUI 的布局系统中,同时也提供给我们一种丝滑更动画的方式在各种布局之间动态切换...现在我们能通过使用新的 currentLayout 解决使用什么布局,现在我们来更新 body 的实现,简单调用从该属性返回的 AnyLayout ,就像函数一样 — 像这样: struct DynamicStack...这样做会令动画流畅,例如在切换设备方向时,我们也有可能在执行此类更改时获得小幅的性能提升(因为 SwiftUI 总是在其视图层次结构为静态时尽可能表现最佳) 选择合适的视图 但我们还没有结束,因为...就像字面意思一样,这种新的容器将会在我们初始化时传递的候选列表中,基于当前上下文挑选出最优视图。

2.8K10

SwiftU:将状态绑定到UI控件

SwiftUI的@State属性包装器允许我们自由修改视图结构体,这意味着当程序更改时,我们可以更新视图属性以匹配。 但是,使用UI控件时,事情会复杂一些。...但是,该代码不会编译,因为SwiftUI想知道文本字段中的文本存储位置。 请记住,视图是其状态的函数——文本输入框只能在反映存储在程序中的值时显示某些内容。...SwiftUI需要的是结构中的一个字符串属性,它可以显示在文本输入框中,还将存储用户在文本输入框中键入的任何内容。...但是,该代码仍然无法工作,因为Swift需要能够更新name属性以匹配用户在文本字段中键入的任何内容,因此您可以使用`@State``,如下所示: @State private var name = "...这告诉Swift,它应该读取属性的值,但也应该在发生任何更改时将其写回。

2.9K10

SwiftUI 动画进阶 — Part4:TimelineView

笔者将在本节中介绍的技术,使用我们已熟知的动画并且热衷于视图动画从一个时间线更新到下一个时间线。这最终将让我们在纯 SwiftUI 中创建我们自己的类似关键帧的动画。...除了在每次日期值更改时推进动画阶段,我们还在 onAppear 闭包中执行此操作。否则,一开始就会有停顿。 最后一段与 SwiftUI 无关的代码是创建 NSSound 实例。...ExplicitTimelineSchedule:可以提供一个数组,其中包含你希望时间线更新的所有时间。 PeriodicTimelineSchedule:可以提供开始时间和发生更新的频率。...但是以可重用性的名义,让我们做一些通用的东西,将来可以重用。 我们新调度程序将被称为:CyclicTimelineSchedule,并将接收一组时间偏移量。每个偏移值都将相对于数组中的前一个值。...第一种情况更灵活,但冗长。也就是说,我们被迫为每个动画指定持续时间,但是,它更灵活,因为我们可以自由使用与偏移量匹配的持续时间。

3.7K30

探讨 SwiftUI 中的几个关键属性包装器

@Binding 直接持有数据,而是提供了对其他数据源的读写访问的包装。 它允许 UI 元素直接修改数据,并反映这些数据的变化。...注意事项 应当谨慎使用 @Binding,当子视图只需响应数据变化而无需修改时,无需使用 @Binding。...@ObservedObject 持有被观察的实例,不保证其生存期。 @ObservadObject 可以在视图存续期内切换其所关联的实例。...some View { VStack { // 显示当前 DataModel 实例的 UUID // 当 MyView 中的 'items' 数组改变时...@Environment 提供了一种相对安全的方法来引入环境数据,因为它可以通过 EnvironmentValue 提供默认值。这减少了因遗漏数据注入而导致的应用崩溃风险。

22410

从前端视角看 SwiftUI

为了模糊焦点,我会尽可能只用 React 当做举例,但套用到其他前端框架原理应该也相同。...从 SwiftUI 当中我们也可以看到类似的演进,原本 ViewController 庞大的 class 以及职责,要负责 view 与 model 的互动,掌管生命周期,转为更轻量的 struct,让开发者可以专注在...而最近的趋势似乎从 Redux 演变成了 TCA(The Composable Architecture),跟 Redux 的中心思想类似,容易与 SwiftUI 整合,比较不一样的地方在于以往涉及...既然采用了类似 redux 的手法,不知道 SwiftUI 是否会遇到与前端开发类似的问题,例如 immutability 确保更新可以被感知;透过优化 subscribe 机制确保 store 更新时只有对应的元件会更新...列表 SwiftUI 与 React 当中都可以渲染列表,而撰写的方式也有雷同之处。

3.5K20

解析SwiftUI布局细节(三)地图的基本操作

(点击地图位置会获取经纬度,反地理编译得到具体的位置信息,显示在列表中) SwiftUI怎样使用UIKit的控件 ---- 我们来总结一下,SwiftUI怎么使用UIKit的控件,中间的连接就是...第二个方法是我们用来更新UIKit控件的方法 理解前面加我们提的关联类型,那我们在第一个方法返回的对象类型就是你要使用的UIKit的类型,第二个方法更新的View也就是我们UIKit的控件。...网络请求到的数据我们怎样刷新页面(模拟) ---- 关于刷新数据这个是比较简单的,用到的就是我们前面提的绑定数据的模式,这点真和Rx挺像的,你创建了一个列表,然后给列表绑定了一个数组数据源,...其实在我们使用UIKit的时候如许多的复用问题我们基本上都是通过写数据再Model里面去解决的,SwiftUI例外。...,那这个数组我们又是怎样定义的呢?

2.1K10

苹果全新UI框架来了!可视化编程,自动化减少20%代码量

SwiftUI还提供对动态类型、暗黑模式、本地化和可访问性的自动支持。 SwiftUI更新了什么? 此次更新主要有5点: 声明式:更加易读的代码。...这意味着编写代码时候,我们说出需要的东西,而不需要考虑如何实现 自动化:这意味着我们以前必须手工完成的许多事情,现在可以让SwiftUI自动完成 组合:构建小模块,然后通过将这些小的功能模块组合起来完成复杂的任务...而SwiftUI通过4种方式,解决了上述问题: 用一个新的声明式UI结构,定义了的布局的外观和工作方式 更新UI预览会自动生成新的Swift代码,反之,更改Swift代码也会更新UI预览 Swift中的任何绑定例如有效的...而拥有简单,更快速,安全的SwiftUI为开发人员实现真正的平台独立性迈出了一大步。 人人都能编程 SwiftUI继承了Swift的理念:每个人都可以编程。...创建列表和导航栏: ? 处理用户输入: ? Drawing and Animation 绘图路径和形状: ? 动画视图和过渡 ? App Design and Layout 复杂界面组合: ?

5.4K20

WWDC 23 ,SwiftUI 5 和 SwiftData 的初印象

本文将聊聊我对本届 WWDC 中 SwiftUI 5.0 和 SwiftData 的初步印象。 访问我的博客 www.fatbobman.com[1] 可以获得更好的阅读体验以及最新的更新内容。...革命性的动画和视觉效果升级 SwiftUI 原本欠缺一些高级的动画和视觉功能在本次升级中一并被补上了,而且苹果大幅更新了动画、转场、Shape、效果等方面的内部实现。...这是我目前整理的一些有关 SwiftData 的问题和注意事项( 原文发表在推文中,没有进行系统的归纳): 尚不支持公共和共享数据的云同步 在当前版本中,通过其他上下文(ModelContext)创建的数据并不会自动合并到视图上下文中...订阅下方的 邮件列表[7],可以及时获得每周最新文章。...s=20 [5] 邮件列表: https://artisanal-knitter-2544.ck.page/d3591dd1e7

36610

Xcode 11 初体验

前面翻译过一篇官方文档:但是大家纷纷反馈看不懂,其实大家希望看到就是一些带着更新去操作的东西。...SwiftUI、storyboad其中我有两篇博客也介绍到了SwiftUI:SwiftUI - 百行代码变十行,Swift再创辉煌 和 WWDC - SwiftUI - 初恋般的感觉 代码块 代码块也做了调整...在Git Tab页面,会展示出当前本地 Branches 列表、Stash Changes 列表、Tags 列表、Remotes 远程仓库列表。...这两个条件对开发者来说应该陌生,它们也是最难通过常规手段复现的场景。...关于Swift UI 的更新 其中我有两篇博客也介绍到了 SwiftUI : SwiftUI - 百行代码变十行,Swift再创辉煌 WWDC - SwiftUI - 初恋般的感觉 参考:Apple 官方文档一线搬砖工人

3.2K10
领券