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

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

但是,SwiftUI 的一些系统控件并没有完全遵循响应式的设计原则,由此某些情况下会出现严重的错误,影响用户体验,并使开发者无所适从。...原文发表我的博客 肘子的Swift记事本视图变化在前、状态变化在后 SwiftUI ,某些可编程控件执行一定的操作时,会先更新视图,待视图变化完成再修改与其对应的状态。...Sheet执行下面的代码,你可以清楚地看到,通过手势取消 Sheet 时,与其关联的状态 Sheet 完成取消动画发生了改变。...通过手势取消 Sheet ,快速右滑导航容器会导致应用锁死这是一个 SwiftUI 所有版本存在的错误,你可以众多的论坛或聊天室里看到不少的开发者都在寻找解决方法。...我们遇到问题的两个场景,应用程序都恰好使用了导航容器,并且通过特定的操作,使 RunLoop 处于了适合 AG 打包更新的状态

583110

肘子的 Swift 周报 #031 |苹果用 M4 来展现拥抱 AI 的决心

毕竟,用户不希望更新新系统,设备的电池续航时间大幅缩短。我迫切希望了解苹果如何在 AI 的性能、能耗、隐私、开发便利性和使用体验等方面找到平衡。...而 SuspendingClock 系统挂起(进入休眠状态)时会停止。...本文是作者响应 Cancer Research UK 2024 年 4 月发起的 100 Push-Ups a Day Challenge[12] 活动,该活动旨在提高公众对癌症的意识。...本教程详细介绍了如何从零开始构建一个名为 “SyncUps” 的复杂 SwiftUI 应用,涵盖了如使用值类型模型化领域、从状态驱动导航、简化领域模型、控制依赖关系以及深入测试应用逻辑等多个核心原则。...尽管过程遇到了一些挑战,作者指出,出现的验证错误并不一定意味着模型有问题,因为这些比较是基于绝对差值进行的,而这些差值有时处于可接受的范围之内。

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

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

Ask Apple 为开发者与苹果工程师创造了 WWDC 之外进行直接交流的机会。本文对本次活动SwiftUI 有关的一些问答进行了整理,并添加了一点个人见解。本文为上篇。...是否有任何建议用来检测列表的行选择,类似于 “NavigationLink”,但不导航到另一个视图(例如,显示 Sheet 或从列表中选择一个选项 )?...onAppear、init、viewDidLoadQ:我的应用程序,我 UIHostingController 托管了 SwiftUI 视图,这些视图都处于一个 UITabBarController...A:目前最好的方法是建立一个导航状态模型对象,它持有导航状态的规范表示,它可以为你的正常和紧凑显示提供专门的程序绑定。...除了使用习惯外,还应考虑偏移的视图是否需要会对周边的视图产生影响( 布局层面 )。详情请阅读 SwiftUI 实现视图居中的若干种方法[14] 。

12.2K20

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

但是,SwiftUI 的一些系统控件并没有完全遵循响应式的设计原则,由此某些情况下会出现严重的错误,影响用户体验,并使开发者无所适从。...这两个错误包括:通过手势取消 Sheet ,快速右滑导航容器导致应用锁死;以及滚动返回上层视图时导致应用崩溃。...Sheet 执行下面的代码,你可以清楚地看到,通过手势取消 Sheet 时,与其关联的状态 Sheet 完成取消动画发生了改变。...通过手势取消 Sheet ,快速右滑导航容器会导致应用锁死 这是一个 SwiftUI 所有版本存在的错误,你可以众多的论坛或聊天室里看到不少的开发者都在寻找解决方法。...我们遇到问题的两个场景,应用程序都恰好使用了导航容器,并且通过特定的操作,使 RunLoop 处于了适合 AG 打包更新的状态

26520

【visionOS】从零开始创建第一个visionOS程序

这样可以使用SwiftUI创建新应用,充分利用visionOS中提供的沉浸感。...在身临其境的体验,使用ARKit将你的内容与人的周围环境整合起来。 页面链接探索新的交互方式 人们可以通过看着一个元素并轻敲手指来选择它。他们还可以使用特定的手势来缩放、拖动、缩放和旋转对象。...SwiftUI为visionOS添加了3D场景类型,还为所有场景类型添加了3D元素和布局选项。 创建你的Xcode投影页面链接 Xcode中选择File >新比;项目。...导航到模板选择器的visionOS部分,并选择App模板。当出现提示时,为项目指定一个名称以及其他选项。 当创建一个新的visionOS应用程序时,你可以从配置对话框配置应用程序的初始场景类型。...构建并运行你的app页面链接 模拟器构建并运行你的应用,看看它看起来如何。visionOS的模拟器有一个虚拟背景作为你的应用程序内容的背景。使用键盘和鼠标或触控板环境中导航并与应用程序交互。

69340

如何用Swift重写C++ObjC代码库,并将其缩减70%

典型的小版本发布,专注于新特性的测试是很容易的。彻底重写,一切都是新的。尽管如此,把问题隐藏了 35 年之后,我决定的最好方式依然是重新审视一切,并从头开始重写。...在为我们的 iOS 产品添加了 AR 支持,受 AR 儿童故事书中使用的启发,我构建了一个原型应用程序,探索如何在数学教育中使用 AR。...原型使用 ARKit 进行视觉和机器学习,虽然 Objective-C 这是可行的,但在 Swift 它会更容易。很显然,苹果的新技术将继续行得通。...C++ 所需的大量重复样板代码 Swift 消失了,只剩下表示逻辑所需的代码,使含义更加清晰了。...性能临界(performance-critical)代码驾驭 Swift 的无数不安全 API 虽然很困难,但也很有效。剩下的最大挑战就是最小化 ARC 保留 / 释放导航表达式树的开销。

88540

SwiftUI TextField进阶——格式与校验

SwiftUI修饰方法) 以上原则,SheetKit——SwiftUI模态视图扩展库[3]和用NavigationViewKit增强SwiftUI导航视图[4]均有体现。...如何在TextField实现格式化显示 现有格式化方法 SwiftUI 3.0,TextField新增了使用新老两种Formatter的构造方法。...如何在TextField屏蔽无效字符 现有屏蔽字符方法 SwiftUI,可以通过设置仅使用特定的键盘类型来实现一定程度上的录入限制。...如何在TextField检查内容是否符合指定条件 相较上述两个目标,SwiftUI检查TextField内容是否符合指定条件是相当方便的。...由于onChange是文字发生变化才会调用,因此,方案二会导致视图二度刷新,不过考虑到文字录入的应用场景,性能损失可以忽略( 使用属性包装器进一步对数值同字符串进行链接,可能会进一步增加视图的刷新次数

8K20

SwiftUI:使用 @EnvironmentObject 从环境读取自定义值

SwiftUI的环境使我们可以使用来自外部的值,这对于读取Core Data上下文或视图的展示模式等很有用。...但是我们也可以将自定义对象发送到环境,并在以后将它们读出来,这使我们可以复杂的应用程序更轻松地共享数据。...您已经了解了如何使用@State处理单个视图的局部状态,以及@ObservedObject如何使我们视图之间传递一个对象,以便我们可以共享它。...Apple已将此工作表情况描述为他们想要修复的错误,因此我希望以后对SwiftUI的更新中会有所改变。...现在,您可能想知道SwiftUI何在.environmentObject(user)和@EnvironmentObject var user: User之间建立连接——如何知道将该对象放入正确的属性?

9.5K20

SwiftUI 4.0 的全新导航系统

欢迎大家 Discord 频道[2] 中进行更多地交流 长久以来,开发者对 SwiftUI导航系统颇有微词。...>, @ViewBuilder destination: () -> Destination) 上述两种方法有一定的局限性: 需要逐级视图进行绑定,开发者想实现返回任意层级视图则需要自行管理状态 声明...SwiftUI 4.0 之前的版本上使用类似的功能,可以参考我 用 NavigationViewKit 增强 SwiftUI导航视图[4] 一文的实现方法 其他增强 除了上述的功能, 新的导航系统还在很多其他的地方也进行了增强...到了 SwiftUI 4.0 版本SwiftUI 已经将其真正的视为了 Button 。...相当一部分开发者由于版本适配的原因并不会使用新的 API ,因此,每个人都需要认真考虑如下问题: 如何从新 API 获得灵感 如何在老版本运用编程式导航思想 如何让新老版本的程序都能享受系统提供的便利

10.2K62

肘子的 Swift 周报 #032|不要等到遇到障碍时意识到无障碍的重要性

全球无障碍意识日的共同创始人之一,Joe Devon, 2011 年发表的一篇文章阐述了一个理念:“数字世界应该向所有人开放,包括那些有残障的人。”这篇文章成为了该活动的发起灵感。...前一期内容|全部周报列表 原创 SwiftUI ,spacing = nil 表示什么?...Debugging Animations ( 调试 SwiftUI 动画 )[10] objc.io[11] SwiftUI ,动画由状态变化触发。...系统根据开发者设置的动画函数,为变化的组件创建状态插值。然而,开发者无法动画过程中进行干预,比如在特定位置暂停动画。...Thomas Durand 本文中探讨了如何在引入新功能的同时确保 API 的向后兼容性,阐述了一系列策略版本控制和向后兼容的变更,确保不同版本的应用能平滑过渡并减少用户干扰。

10710

Swift 周报 第四十一期

然而,先前提出的一些目标包括尚处于开放式研究阶段的问题。 Swift 6 的工作进展的同时,语言指导组正在将 Swift 6 剩余变更的重点缩小到默认情况下的数据竞争安全。...这个特性的主要思想就是程序崩溃将其挂起,从而给你机会附加一个调试器,或对崩溃过程进行更深入的查看。 最后,后退功能支持结构化并发,并且能够正确地逆向穿过异步框架。...掌握 SwiftUI 的 ContentUnavailableView [10] 摘要: 这篇博客介绍了如何在 SwiftUI 掌握使用 ContentUnavailableView 类型。...ContentUnavailableView 类型允许我们应用中表现空状态、错误状态或其他任何内容不可用的状态。...SwiftUI 的 visual effects[11] 摘要: 这篇博客介绍了 SwiftUI WWDC2023 引入的一种叫做 visualEffect 的新视图修饰符。

20640

SwiftUI 实现一个开源的 App Store

[iAppStore-03.jpg] 而现在 iOS 15 的 App Store 增加了更多的功能,比如产品页优化、自定产品页、App 内活动(In-App Events)等,目的很明显就是让开发者增加活跃内容...[iAppStore-04.jpg] 最重要的是,我们把所有国家和地区的商店,都集成一个面板,通过下拉列表选择,实现快速切换榜单。...通过大量的网页检索,最终测试整理成有价值的列表: 3.1 榜单接口 查询排行榜的 API 示例 链接示例 链接说明 参考链接 https://rss.applemarketingtools.com/api...链接 以上内容苹果公开的文档,都没有查询到 API 文档。...比如,SwiftUI 还不支持 WebView,所以用 SFSafariViewController 桥接的 View SwiftUI 组件显示会异常。

2K20

百行代码变十行,苹果SwiftUI可视化编程让开发者惊呼完美

而对于开发者来说,新发布的 SwiftUI 可能是最吸引人的特性, Craig Federighi 的演示,我们可以轻松地把一百行的前端代码缩减到十几行。...动态替换:Swift 编译器和运行时可以完全嵌入到 Xcode ,所以我们的 APP 会一直处于构建和运行的状态。我们看到的预览界面并不是对用户界面的近似,它就是我们的实时 APP。...Swift 包使开发者可以更简单的不同的项目之间,以及 Swift 社区共享工具和源代码。... Swift 包管理项目上线,我们可以更加便捷地构建和调用不同的开源工作。 ?...参考链接: https://developer.apple.com/xcode/swiftui/ https://github.com/apple/swift https://github.blog/2019

4K10

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

Ask Apple 为开发者与苹果工程师创造了 WWDC 之外进行直接交流的机会。本文对本次活动SwiftUI 有关的一些问答进行了整理,并添加了一点个人见解。本文为下篇。...Swiftcord[12] 的代码展示了如何在 SwiftUI 下实现倒置列表。阅读 优化 SwiftUI List 显示大数据集的响应效率[13] 一文,了解苹果工程师推荐的方法。... background 修饰器,可以通过 ignoresSafeAreaEdges 参数设置是否忽略安全区域。这个技巧对于处于屏幕的顶部或底部的视图十分有用。详情请参阅 推文[15] 。...macOS APIQ:对于运行 Monterey 的 Mac,能否如何在 SwiftUI 实现下面需求的建议:打开一个窗口该窗口中初始化数据找到所有打开的窗口确定一个窗口是否打开从不在该窗口的视图中关闭一个窗口...连锁动画Q: SwiftUI ,如何实现连锁动画?例如,我想先给一个视图做动画,当动画完成立即启动另一个动画。A:不幸的是,目前不可能实现连锁动画。

14.7K30

SwiftUI 实现一个开源的 App Store

而现在 iOS 15 的 App Store 增加了更多的功能,比如产品页优化、自定产品页、App 内活动(In-App Events)等,目的很明显就是让开发者增加活跃内容,提升 App 日活和收入...最重要的是,我们把所有国家和地区的商店,都集成一个面板,通过下拉列表选择,实现快速切换榜单。 2.2 App 详细页 App 详细页面,把开发者最关心的参数显示最前面。...另外,右上角切换国家和地区,显示不同地区的 App 搜索。 2.4 应用状态订阅 这个状态订阅是什么意思?...通过大量的网页检索,最终测试整理成有价值的列表: 3.1 榜单接口 查询排行榜的 API 示例 链接示例 链接说明 参考链接 https://rss.applemarketingtools.com/api...比如,SwiftUI 还不支持 WebView,所以用 SFSafariViewController 桥接的 View SwiftUI 组件显示会异常。

1.7K20

Swift 周报 第十期

最近的提议使存在类型更加明确[6],以帮助开发人员理解这种动态性质,并通过消除一些限制使存在类型更具表现力[7]。但是存在类型的基本类型仍然存在,一旦你有一个存在类型的值,你就很难对其使用泛型。...为了避免这种情况,该提案要求调用显式地作为任何 P 类型注释,其中当前可以表达的返回类型将丢弃对被类型擦除的原始关联类型的约束,提案的示例所示: protocol P { associatedtype...与泛型一样,它们使函数能够获取和返回多种可能的类型。与泛型参数类型不同,存在类型作为输入传递给函数时不需要预先知道。此外,当从函数返回时,可以删除具体类型(隐藏在协议接口后面)。...这些都具有相同的风格,即选择现有的 Swift 4.x/5.x 代码进行改进,这些改进将出现在 Swift 6 。...SwiftUI 动画进阶 — Part4:TimelineView 摘要: 前三篇高级 SwiftUI 动画是作者实战总结的内容。本篇文章,我们将详细地探索 TimelineView。

2.1K00

掌握 SwiftUI 的 Safe Area

UIKit ,开发者需要利用 safeAreaInsets 或 safeAreaLayoutGuide ,才能确保将视图放置界面的可见部分。 SwiftUI 对上述过程进行了彻底的简化。...SwiftUI 同时提供了一些方法和工具让开发者对安全区域有所控制。 本文将探讨如何在 SwiftUI 获取 SafeAreaInsets、将视图绘制到安全区域之外、修改视图的安全区域等内容。...对于根视图来说,safeAreaInsets 反映的是状态栏、导航栏、主页提示器以及 TabBar 等各个边的占用数值。... SwiftUI ,开发者通常只有需要获取 StatusBar + NavBar 的高度或 HomeIndeicator + TabBar 的高度时才会使用到 safeAreaInsets 。...从 iOS 14 开始,SwiftUI 计算视图的安全区域时,将软键盘在屏幕上的覆盖区域(iPadOS 下,将软键盘缩小键盘的覆盖区域将被忽略)也一并进行考虑。

7.5K31

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

( 东坡肘子 "Fatbobman( 东坡肘子)")") SwiftUI 的框架,惰性布局容器, List 和 LazyVStack,提供了一种高效展示大型数据集的方法。...自定义遵循 RandomAccessCollection 的实现 实现无限数据加载 id 修饰器对 List 懒加载机制的影响 惰性容器SwiftUI 仅保留 ForEach 子视图最顶层的状态...Swift 前向声明函数的能力,允许他们直接引用编译二进制可能在当前模块不可见的函数。...因此,他建议仅在完全理解可能的后果时项目中使用此属性。...尽管日常应用开发不经常需要用到全局 actor,但它们在某些特定场景下,主线程渲染,显得格外有价值。

10410

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

考虑到身体也已经恢复到了一个不错的状态,就决定尝试做一个能满足自己需求的 app, 一方面是活动活动脑子,另一方面也算重拾当前的兴趣。...SwiftUI、Combine 以及 Core Data 的新特性对我很有吸引力兴趣驱动,没有商业压力和历史包袱,因此可直接采用尚未成熟或前景不明的技术经过一番了解,最终选择 SwiftUI +...最后反复权衡仍然回头选择了 Core Data。...吐槽、提示、经验、总结本文基本上处于意识流状态,想哪写哪。下文是关于我开发过程遇到的一些问题,bug ,总结的技巧,获得的一点点经验等。没有必然的前后顺序,如果里面有错误,希望大家轻点点评 。...但我一时头脑发热 app 已经进入了 review 的情况下改动了资费的元数据,结果 app 被拒,而此时该资费便始终处于审核状态

2.5K40
领券