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

解析 SwiftUI 中两处由状态更新滞后引发严重 Bug

原文发表在我博客 肘子Swift记事本视图变化在前、状态变化在后在 SwiftUI 中,某些可编程控件在执行一定操作时,会先更新视图,待视图变化完成后再修改与其对应状态。...而通过调用环境值或直接修改绑定状态SwiftUI 则遵循了响应式编程原则,进行了先调整状态,后更新视图操作。...如果仅从上述两个例子考虑,无论状态调整是否及时,都不会出现什么错误结果。但是,当应用程序处于某些特殊状态或用户进行某些特定操作时,状态更新滞后会导致不可接受后果。...请至少进入第三级视图滚动当前视图当视图处于滚动状态时,点击 NavigationStack 左上角 “Back” 按钮。...在我们遇到问题两个场景中,应用程序都恰好使用了导航容器,并且通过特定操作,使 RunLoop 处于了适合 AG 打包更新状态

588110
您找到你想要的搜索结果了吗?
是的
没有找到

解析 SwiftUI 中两处由状态更新滞后引发严重 Bug

而通过调用环境值或直接修改绑定状态SwiftUI 则遵循了响应式编程原则,进行了先调整状态,后更新视图操作。...如果仅从上述两个例子考虑,无论状态调整是否及时,都不会出现什么错误结果。但是,当应用程序处于某些特殊状态或用户进行某些特定操作时,状态更新滞后会导致不可接受后果。...请至少进入第三级视图 滚动当前视图 当视图处于滚动状态时,点击 NavigationStack 左上角 “Back” 按钮。...为什么状态更新滞后会导致严重错误 由于 SwiftUI 不透明性,想要分析这些问题成因并不容易。...在我们遇到问题两个场景中,应用程序都恰好使用了导航容器,并且通过特定操作,使 RunLoop 处于了适合 AG 打包更新状态

26520

用NavigationViewKit增强SwiftUI导航视图

由于SwiftUI原生提供导航手段能力有限,因此在之前版本中,NavigationView总是使用不是那么顺手。...该扩展遵循以下几个原则: •破坏性任何新添加功能都不能影响当前SwiftUI提供原生功能,尤其是不能影响例如Toolbar、NavigationLink在NavigationView中表现•尽可能便于使用仅需极少代码便可使用新增功能...•SwiftUI原生风格扩展功能调用方法尽可能同原生SwiftUI方式类似 请访问Github下载NavigationViewKit[4] NavigationViewManager 简介 开发者对NavigationView...,鱼和熊掌不可兼得•使用程序化NavigationLink通过撤销根视图程序化NavigationLink(通常是isActive)来返回。...此种手段将限制NavigationLink种类选择,另外不利于从视图代码中实现。

3.2K20

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

Ask Apple 为开发者与苹果工程师创造了在 WWDC 之外进行直接交流机会。本文对本次活动中与 SwiftUI 有关一些问答进行了整理,并添加了一点个人见解。本文为下篇。...SwiftUI 4.0 Form 在 Ventura 上表现与以往版本有很大不同。形式上更接近 iOS 状态,同时也对 mac 进行了更多适配。...但是,此转换仅在文本字段完成编辑时才会发生,并且不会阻止输入数字字符。目前 SwiftUI 没有 API 可以限制用户在字段中输入字符。...将背景扩展到安全区域Q:如果我有一个自定义容器类型,可以接受一个顶部和底部视图,是否有办法让 API 调用者将所提供视图背景扩展到安全区域内,同时将内容( 如文本或按钮 )保留在安全区域内?...deprecated 版本是 Swift 框架作者一种沟通方式,即一个 API 不应该在新项目中使用,但在现有项目中继续使用也无妨。

14.7K30

如何让 SwiftUI 列表变得更加灵活

前言 List 可能是 SwiftUI 附带内置视图中最常用一种,它使我们能够在任何 Apple 平台上呈现“类似于表格视图”用户界面。...由于每个 article 值在 ForEach 闭包中都是可变,我们可以使用新 swipeActions 修饰符来实现每个 NavigationLink 项目视图自定义滑动操作。...在这种情况下,用户可以轻松项目视图上滑动来决定喜不喜欢对应文章: struct ArticleList: View { @ObservedObject var viewModel: ArticleListViewModel...下拉刷新 就我个人而言,下拉刷新在我 SwiftUI 功能请求列表中非常重要,所以我很高兴看到今年版本增加了对这种非常常见 UI 范式内置支持。...由于系统会自动检测知道 viewModel.reload() 何时调用完成,因此可以防止发生重复刷新操作,并且可以更具状态显示和隐藏相应 UI。

4.8K41

解析SwiftUI布局细节(二)循环轮播+复杂布局

这篇我们还是说我们关于SwiftUI东西,再提一下Demo代码我已经提交上Git了,目前Demo进度为一级页面基本上结束,地图点击大头针添加也刚处理完,代码有需要小伙伴可以去Git看看,项目地址...NavigationView + NavigationLink 界面跳转,在苹果给 SwiftUI 使用例子中就是这样写,当然我们在正常使用中这样写也没啥问题,那我们界面跳转问题是什么呢?...NavigationLink 单击没法跳转,只有长按时候才能跳转,这个问题抛出来,有懂得小伙伴希望能给我说一下,这个问题我也一直没有解决!...具体我们会看下面的代码,他们区别就是像拖拽我们可以监控它改变状态,点击或者双击、长按等我们可以添加事件等等。...区别于我们UIKit创建方式,SwiftUI对它进行了简化,具体创建如下: /// SwiftUI对定时器简化,可以进去看看具体参数定义 private let timer = Timer.publish

11.8K20

SwiftUI 与 Core Data —— 安全地响应数据

SwiftUI 与 Core Data —— 问题[1]SwiftUI 与 Core Data —— 数据定义[2]SwiftUI 与 Core Data —— 数据获取[3]可以在 此处[4] 获取演示项目...例如下面的 count 属性( Integer 16 )在模型编辑器中被设定为可选,但在生成代码中仍将为可选值类型( Int16 )。...回到 Xcode 创建 Core Data 模版代码,我们做如下尝试,在进入 NavigationLink 后一秒钟删除该数据:ForEach(items) { item in NavigationLink...}}在响应式编程中,开发者不应假设每个部件均能处于理想环境中,需要尽力确保它们能够任何情况下均保证安全稳定,如此才能保证整个系统稳定运转。...但在非常多情况下,开发者并不会使用演示中使用 NavigationLink 版本,为了对视图拥有更强地控制力,开发者通常会选择具备可编程特性 NavigationLink 版本。

3.2K20

自定义 Button 外观和交互行为

相较于 UIKit ,SwiftUI 通过 Button 视图,让开发者以少量代码便可完成按钮创建工作。...label:目标按钮的当前视图,通常对应着 Button 视图中 label 参数内容role:iOS 15 后新增参数,用于标识按钮角色( 取消或具备破坏性)isPressed:当前按钮按压状态...ButtonStyle 和 PrimitiveButtonStyle 是专门针对按钮样式 API ,它们不仅可以应用于 Button 视图,也可以应用于很多 SwiftUI 预置系统按钮功能之上,例如...默认情况下,即使单元格视图中包含了多个按钮SwiftUI 也只会将 List 单元格视作一个按钮( 点击后同时调用所有按钮操作 )。...不再调用其指定闭包操作,附加手势需在 Button 之外添加( 例如下文 simultaneousGesture 实现 )为按钮添加 Trigger在 SwiftUI 中,为了判断某个按钮是否被按下

3.7K60

从用SwiftUI搭建项目说起

前言 ---- 后续这个SwiftUI分类文章全部都是针对SwiftUI日常学习和理解写,自己利用Swift写第二个项目也顺利上线后续需求也不是特着急,最近正好有空就利用这段时间补一下自己对...Apple SwiftUI SwiftUI ---- 在进入项目搭建先说说我自己对SwiftUI一个基本认知: SwiftUI我觉得对iOSer来说最大是开发UI模式优化...下面开始我们最常见项目场景搭建,一点点学习一下SwiftUI里面的一些知识。...常见控件在SwiftUI一些具体使用,这个项目会随着学习进度慢慢把所有的内容都基本补齐,下面是最基本导航+标签git效果。...,需要注意是我们点击item时候视图切换绑定状态,基本上在代码注释中我说比较清楚了,应该能理解

4.4K20

老人新兵 —— 一款 iOS APP 开发手记

考虑到身体也已经恢复到了一个不错状态,就决定尝试做一个能满足自己需求 app, 一方面是活动活动脑子,另一方面也算重拾当前兴趣。...吐槽、提示、经验、总结本文基本上处于意识流状态,想哪写哪。下文是关于我在开发过程中遇到一些问题,bug ,总结技巧,获得一点点经验等。没有必然前后顺序,如果里面有错误,希望大家轻点点评 。...按钮失效。...复杂 Form 在同一个 view 中,处于 Sheet 和 Sheet 下也会出现异常。TextField简单应用没有问题,除了不支持多行输入。...但我一时头脑发热在 app 已经进入了 review 情况下改动了资费元数据,结果 app 被拒,而此时该资费便始终处于审核状态

2.5K40

Swift 周报 第十一期

如果苹果在下一代 iPhone 上增加一个常亮显示功能,那么这种电池百分比调整也会很有用,因为用户可以在不碰手机情况下就可查看电池状态。...,获得批准后即可参加活动。...在 Linux 上,没有这么简单解决方案。 提议成立 Swift Tooling 工作组[13] 目前有许多工具类领域处于无人管理状态。应该需要有一个小组来监督、推动和指导工作。...推荐博文 Swift 社区文章仓库 摘要: 给大家推荐一下 Swift社区 文章仓库,里面整理了公众号中文章,并进行分类(Swift 进阶、Swift 基础、SwiftUI 进阶、SwiftUI 基础...使用 Swift Package 插件生成代码 摘要: 在 Xcode 14 公告中说明,允许在 Xcode 项目中使用 Swift Package 插件,以及一些架构更改。

1.1K20

优化在 SwiftUI List 中显示大数据集响应效率

列表视图初始化和 body 求值 如果对 SwiftUI NavigationView 有一定了解的话,应该知道 SwiftUI 会对 NavigationLink 目标视图进行预实例化(但不会对...另外如果 id 标识值发生变化,SwiftUI 将丢弃原视图(生命周期终止及重置状态)并重新创建新视图。...新问题 细心朋友应该可以注意到,运行解决方案一代码后,在第一次点击 bottom 按钮时,大概率会出现延迟情况(并不会立即开始滚动)。...由于整个滚动过程中仅实例化并绘制了 100 多个子视图,对系统压力并不大,因此在经过反复测试后,首次点击 bottom 按钮会延迟滚动问题大概率为当前 ScrollViewProxy Bug...scrollByUITableView_2022-04-23_19.44.26.2022-04-23 19_46_20 希望 SwiftUI 在之后版本中能够改善上面的性能问题,这样就可以无需使用原生方法也能达成好效果

9.1K20

Ask Apple 2022 与 SwiftUI 有关问答(上)

Ask Apple 为开发者与苹果工程师创造了在 WWDC 之外进行直接交流机会。本文对本次活动中与 SwiftUI 有关一些问答进行了整理,并添加了一点个人见解。本文为上篇。...是否有任何建议用来检测列表中行选择,类似于 “NavigationLink”,但不导航到另一个视图(例如,显示 Sheet 或从列表中选择一个选项 )?...对 iOS 和 iPadOS 来说,一个按钮或许有效,但对 macOS 就不太适合了。另外,.contextAction 支持多选。它还会回来吗?...onAppear、init、viewDidLoadQ:在我应用程序中,我在 UIHostingController 中托管了 SwiftUI 视图,这些视图都处于一个 UITabBarController...对于惰性视图(如 LazyVStack ),一旦 hosting controller 视图被初始化,onAppear 将被调用。

12.2K20

Swift 周报 第四十一期

你将能探索: App Store 活动:了解关于探索、互动、App 内活动、自定产品页面、订阅推荐做法等众多精彩内容。...然而,先前提出一些目标包括尚处于开放式研究阶段问题。在 Swift 6 工作进展同时,语言指导组正在将 Swift 6 剩余变更重点缩小到默认情况下数据竞争安全。...这个有限修订与启用扩展枚举正交、增量工作无关,该工作适用于弹性库。 讨论列出类型存储属性[5] 我心愿已久一项功能是能够将类型存储属性与计算属性分开进行分类。...ContentUnavailableView 类型允许我们在应用中表现空状态、错误状态或其他任何内容不可用状态。...文章通过实例演示了 ContentUnavailableView 基本用法以及如何在其中定义描述文本和操作按钮

20840

SwiftUI 中创建自适应程序化导航方案

从 4.0 版本开始,苹果对之前 SwiftUI 有限程序化导航能力进行了大幅度增强,通过引入 NavigationStack 和 NavigationSplitView,开发者基本上具备了全程掌握应用导航状态能力...与 UIKit 使用命令式导航方式不同,SwiftUI 作为一个声明式框架,感知与设置两者之间是二位一体关系。读取状态即可获知当前导航位置,更改状态便可调整导航路径。...因此在 SwiftUI 中,掌握两种导航容器状态表述差异是实现自适应导航方案关键。...视觉状态对于一些简单两列或三列导航布局,SwiftUI 可以自动将其转换成 NavigationStack 表现形式。...= nil { List(selection: $store.detailID)} else { Text("Empty")}修改状态后,List 仍会用灰色显示上次选中项目即使取消了状态

4.2K30

肘子 Swift 周报 #025 | Lets VisionOS, Lets rock and roll!

在此次大会上,与来自不同地域和领域开发者进行深入探讨,激发了新思维火花、创意灵感和合作机会。我深信,这正体现了线下活动真正价值。 期待未来,中国开发者社区能够承办更多此类精彩活动。...同时,我也鼓励每位开发者珍惜参加全球各类活动机遇,全心投入其中,享受这些活动带来乐趣与成长。...近期推荐 Writing GNOME Apps with Swift[8] david-swift[9] 近年来,Swift 社区积极推进该语言在各个平台上应用,但由于缺少适合 UI 框架,其较少被用于在苹果平台中构建桌面应用...文中提出,对于规模较小项目,工厂模式是一个不错选择,而对于规模较大项目,则可能需倾向于采用 Needle 这样框架来确保高度可扩展性与安全性。...对于正处于初期阶段项目,采用 Environment 或单例可能是一种灵活暂时方案,随着项目的发展,再逐步迁移到更加结构化 DI 方案。

10010

肘子 Swift 周报 #023 | 为应用配备隐私清单

自定义遵循 RandomAccessCollection 实现 实现无限数据加载 id 修饰器对 List 懒加载机制影响 在惰性容器中,SwiftUI 仅保留 ForEach 子视图最顶层状态...针对特定类型状态, SwiftUI 释放内存资源不够积极 近期推荐 Swift Tooling: Windows Edition[3] The Browser Company[4] Swift 正在积极扩展其支持平台范围...OpenSwiftUI[5] 是一个由 Kyle Ye[6] 创建项目,旨在实现 SwiftUI 开源版本,使其可用于苹果平台上 GUI 应用开发。...该项目虽然还处于初期阶段,但已经取得显著进展。我们期待更多开发者关注和参与,共同推动这个项目的发展。...因此,他建议仅在完全理解可能后果时才在项目中使用此属性。

10610
领券