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

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

但是,SwiftUI 中的一些系统控件并没有完全遵循响应式的设计原则,由此在某些情况下会出现严重的错误,影响用户体验,并使开发者无所适从。...本文将解析 SwiftUI 中两个由于未能贯彻响应式编程原则而导致的严重错误,并提供相应的解决方案。...在我们遇到问题的两个场景中,应用程序都恰好使用了导航容器,并且通过特定的操作,使 RunLoop 处于了适合 AG 打包更新的状态。...由于在返回上层视图时,状态尚未更新,因此在清理 AG 时(返回动画运行中),会破坏应用程序的 AttributeGraph 完整性,从而导致应用程序死锁或崩溃。...随着版本的提高,SwiftUI 的功能也确实得到了相当程度的增加。不过,即使在最新的版本中,在一些对 UIKit(AppKit)进行二次包装的控件中,仍有不少细节处理不到位的问题。

763110

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

但是,SwiftUI 中的一些系统控件并没有完全遵循响应式的设计原则,由此在某些情况下会出现严重的错误,影响用户体验,并使开发者无所适从。...本文将解析 SwiftUI 中两个由于未能贯彻响应式编程原则而导致的严重错误,并提供相应的解决方案。...在我们遇到问题的两个场景中,应用程序都恰好使用了导航容器,并且通过特定的操作,使 RunLoop 处于了适合 AG 打包更新的状态。...由于在返回上层视图时,状态尚未更新,因此在清理 AG 时(返回动画运行中),会破坏应用程序的 AttributeGraph 完整性,从而导致应用程序死锁或崩溃。...随着版本的提高,SwiftUI 的功能也确实得到了相当程度的增加。不过,即使在最新的版本中,在一些对 UIKit(AppKit)进行二次包装的控件中,仍有不少细节处理不到位的问题。

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

    肘子的 Swift 周报 #058| 运气眷顾耐心的人

    前一期内容|全部周报列表 原创 理解 SwiftUI 的视图刷新机制:从 TimelineView 刷新问题谈起[3] Fatbobman(东坡肘子)[4] 在 SwiftUI 中,视图的自动刷新机制让我们能够轻松构建响应式的用户界面...★在阅读这篇笔记后,我立即联系了 OpenGraph[9](AG 的开源复刻版本)作者 Kyle Ye[10](他已与 Eidhof 建立了联系)。...希望在这些优秀开发者以及更多人的共同努力下,能进一步揭开 AG 的神秘面纱,从而加深我们对 SwiftUI 框架的理解,提升应用性能,并有效避免因 AG 错误引发的问题。...然而,这种做法也彻底放弃了编译器提供的检查和保护。Jared Sinclair 在开发中遭遇了因@unchecked Sendable的使用与隐式 Actor 隔离行为的不一致而导致的应用崩溃。...在本文中,Sinclair 不仅详细展示了崩溃的成因,还提出了基于 Actor 的改进方案,并深入分析了~Copyable协议和consuming关键字在并发场景中的作用,说明它们如何改进编译时检查,提升代码的并发安全性

    5700

    一篇博客让你了解RxJava

    onError, 反之亦然 注: 关于onComplete和onError唯一并且互斥这一点, 是需要自行在代码中进行控制, 如果你的代码逻辑中违背了这个规则, 并不一定会导致程序崩溃....比如发送多个onComplete是可以正常运行的, 依然是收到第一个onComplete就不再接收了, 但若是发送多个onError, 则收到第二个onError事件会导致程序会崩溃.当我们写多个onComplete...当我们在主线程去创建一个Observer来接收事件, 则这个Observer默认就在主线程中接收事件,但其实在现实工作中我们更多的是需要进行线程切换的,最常见的例子就是在子线程中请求网络数据,在主线程中进行展示...中, 这个CacheThread其实就是IO线程池中的一个....builder = new OkHttpClient().newBuilder(); builder.readTimeout(10, TimeUnit.SECONDS); builder.connectTimeout

    53020

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

    而SwiftUI通过4种方式,解决了上述问题: 用一个新的声明式UI结构,定义了的布局的外观和工作方式 更新UI预览会自动生成新的Swift代码,反之,更改Swift代码也会更新UI预览 Swift中的任何绑定例如有效的...让Xcode for iPad更上一层楼 开发者对Interface Builder的抱怨不是一天两天了,它大大增加了分解视图块以及从视图控制器(view controller)使用视图的工作量,导致出现体积臃肿的视图控制器...此前,无论什么尺寸屏幕的iPad,总是很难将Interface Builder的大小放到iOS上。而拥有更简单,更快速,更安全的SwiftUI为开发人员实现真正的平台独立性迈出了一大步。...尽可能的依赖工具 通过消除源码控制的痛点、消除对UIKit的严重依赖、消除Interface Builder可能遇到的一些连接混淆,苹果希望开发者更多的使用Swift,尽可能的依赖工具而不是纠结于一些不必要的事情...感受一下SwiftUI的代码风格 ? Github一个repo整理了在WWDC 2019发布的SwiftUI布局框架的一些官方示例: SwiftUI Essentials 创建和组合视图: ?

    5.4K20

    干货 | 关于SwiftUI,看这一篇就够了

    其在SwiftUI中的作用。...2.1 Opaque Result Type 新建一个SwiftUI的新项目,会出现如下代码:一个Text展示在body中。...用户交互过程中,会产生一个用户的action,从上图可以看出,在SwiftUI中数据的流转过程如下: 该行为触发数据改变,并通过@State数据源进行包装; @State检测到数据变化,触发视图重绘;...builder.add(Text(tip)) return builder.build() } } 用@_functionBuilder修饰的内容,均会实现一个构造器,构造器的功能如上述代码所示...同时SwiftUI中也是支持frame设定,但也不会像UIKit中那样作用于当前元素,在内部也是形成一个虚拟的View来承载frame设定,在布局过程中进行frame计算最终显示出想要的结果。

    10.6K11

    如何在Xcode下预览含有Core Data元素的SwiftUI视图

    在预览含有Core Data元素的视图时崩溃的出现次数会愈发频繁,在某种程度上可能已经影响了开发者在SwiftUI中使用Core Data的热情。...结合两年来我在SwiftUI中使用Core Data的经验和教训,我们将在本文中探讨: •导致SwiftUI预览崩溃的部分原因•如何在之后的开发中避免类似的崩溃出现•如何在Xcode中安全可靠地预览含有...其他视图、方法、声明等的代码错误,都可能会导致你无法预览当前的视图。 在排查视图预览崩溃的原因时,一定不能只关注当前视图或临近视图的代码,其他代码中的错误可能才是罪魁祸首。...•在模拟器设备管理器中删除模拟器再重新添加 上述的手段,多数也都适用于修复某些情况下的预览崩溃。...虽然它完全破坏了单向数据流的逻辑和美感,但由于它过分的好用,因此在SwiftUI的开发中仍被广泛的采用。

    5.2K10

    构建稳定的预览视图 —— SwiftUI 预览的工作原理

    作为 SwiftUI 最引人注目的功能之一,预览功能吸引了不少开发者初次接触 SwiftUI。然而,随着项目规模的增长,越来越多的开发者发现预览功能并不如最初想象的那么易用。...由于预览崩溃的次数和场景的增加,一些开发者已经视预览为 SwiftUI 的缺点之一,并对其产生了排斥感。 预览功能真的如此不堪吗?我们当前使用预览的方式真的妥当吗?...欢迎大家在 Discord 频道[2] 中进行更多地交流 让预览崩溃的一段视图代码 不久前,Toomas Vahter 写了一篇博客 Bizarre error in SwiftUI preview[3...可惜的是,Toomas Vahter在文章中没有告诉读者崩溃原因。我借用这段代码来与大家一起探究预览功能是如何工作的。...这就解释了这段代码为什么在模拟器和真机中可以运行,但会导致预览崩溃。因为预览是以衍生代码作为入口,只依赖有限的导入信息对衍生代码进行编译,因此可能会出现因信息不完整而无法编译的情况。

    59010

    肘子的 Swift 周报 #001

    然而,过了一段时间,我发现当我从记忆中寻找技术线索时,那些我仔细筛选、阅读并推荐的文章给我留下了深刻的印象。停刊后,虽然我每天也在阅读不少文章和博客,但印象没有之前担任编辑时那么深刻。...在 Fatbobman's Swift Weekly 中,除了为订阅者提供我个人博客的最新消息外,还会分享其他优秀作者关于 Swift、SwiftUI、Core Data、SwiftData 等方面的内容...解密 SwiftUI 背后的 AttributeGraph[12] KyleSwifter[13] 在工作中,作者发现在 watchOS 10 上的某段代码会出现 AttributeGraph 的循环依赖错误提示...通过定制的 AttributeGraph 分析工具,最终发现根本原因来自于对 NSAttributedString 的初始化方法的错误调用,以及系统控件对 AG 碎片更新的错误时机。...他们希望通过深入的文章和教程、简单但有用的工具,以及活跃但不吵闹的讨论组,帮助任何有抱负的创作者在 XR 世界中创造和深化工作。

    29140

    肘子的 Swift 周报 #033|改善社区活跃度,仅更新论坛还不够

    在论坛的新版本中,苹果工程师的身份通过统一的标识( 头像上的苹果标志 ) ,替代了之前通过签名来表明身份的方式。...然而,这种以部门身份进行回答的做法,无形中增加了工程师与开发者之间的距离,使得交流缺乏个人化和情感交流,这并非塑造友好论坛氛围的良策。...在这篇文章中,我将梳理从首个版本起那些给我留下深刻印象的 SwiftUI 关键更新及其影响。这不仅是对 SwiftUI 从诞生到逐渐成熟过程的回顾,也是一次对它所蕴含活力的新的认识。...在这篇文章中,Antoine van der Lee 探讨了如何以适合 SwiftUI 的方式实施 MVVM 架构模式来构建视图。...Jeremy Gale[17] Jeremy Gale 在这篇文章中探讨了 UIKit 开发者在学习 SwiftUI 时面临的独特挑战。

    14510

    零基础也能搞定的iOS编程,你还没开始学么?

    在iOS开发的过程中,最耗费时间的并不是代码逻辑,而是对用户界面的处理。SwiftUI框架可以给你更快速的迭代和测试体验,帮你更快捷地实现你想要的功能。...2020年,苹果公司将更多的功能和用户界面控件添加到了Xcode 12的SwiftUI框架中,并将设计提升到了一个更高的水准。...当然,利用SwiftUI设计用户界面并不是要求你马上放弃使用Interface Builder和UIKit框架,但是,SwiftUI代表了苹果系统各个平台上应用程序开发的未来。...书中妙趣横生的小案例利用SwiftUI框架搭建用户界面,手把手式的教学,相信一定能为你带来奇妙的体验。...数字化转型中,如何高效设计业务架构? 云原生架构:从技术演进到最佳实践 一行Python代码解决问题是时尚还是玄学 ▼点击阅读原文,查看本书详情~

    72940

    用 SwiftUI 实现一个开源的 App Store

    一、前言 App Store 一直以来都是 iPhone 生态的最重要一环,在初代 iPhone 商店,因为 App 比较少,当时就有 Top 25 榜单: 然后在后续的 App Store 迭代中,...最重要的是,我们把所有国家和地区的商店,都集成在一个面板中,通过下拉列表选择,实现快速切换榜单。 2.2 App 详细页 App 详细页面,把开发者最关心的参数显示在最前面。...比如,SwiftUI 还不支持 WebView,所以用 SFSafariViewController 桥接的 View 在 SwiftUI 组件中显示会异常。...详细,可以参考源代码中 AppRank.swift[16] 类。...感谢大家~ 参考资料 [1] iAppStroe: https://github.com/37iOS/iAppStore-SwiftUI [2] RSS Builder: https://rss.applemarketingtools.com

    1.8K20

    肘子的 Swift 周报 #050| 你的 App 被新系统打败了吗?

    与 UI 层面的小故障相比,更底层的崩溃问题则让一些开发者措手不及。使用 SwiftData 的应用崩溃频率显著增加,这无疑让许多对这一新框架抱有期待的开发者感到失望。...如何在 SwiftUI 的 NavigationDestination 修饰符中传递 Binding (How to pass Bindings to views in SwiftUI's NavigationDestination...同时,文章还提供了相关代码示例与性能优化建议,帮助开发者更灵活高效地处理 SwiftUI 中的导航和数据绑定。...的 attributes 合并机制发生了显著变化,导致一些开发者在处理带有 Range的属性时遇到崩溃问题。...的 NavigationDestination 修饰符中传递 Binding (How to pass Bindings to views in SwiftUI's NavigationDestination

    10610

    为什么SwiftUI的视图使用结构体?

    在UIKit中,每个视图都来自一个名为UIView的类,该类具有许多属性和方法:背景色,确定其放置方式的约束,用于将其内容呈现到其中的图层等等。...struct or class 通常这不是问题,但是有一个名为UIStackView的特定子类,它类似于SwiftUI中的VStack和HStack。...在UIKit中,UIStackView是一种非渲染视图类型,旨在简化布局,但这意味着即使它因为继承的原因具有背景色,也​​从未真正使用过。...在SwiftUI中,我们所有的视图都是简单的结构体,几乎可以自由创建。想想看:如果您制作一个仅包含一个整数的结构体,则结构体的整个大小就是:一个整数。没有其他的。...提示:如果您在视图中使用类,则可能会发现代码无法编译或在运行时崩溃。 相信我:使用结构体。

    3.2K10

    SwiftUI 动画进阶 — Part 5:Canvas

    一个简单的 Canvas 简而言之,画布Canvas 是一个 SwiftUI 视图,它从一个渲染闭包中获得绘制指令。与 SwiftUI API 中的大多数闭包不同,它不是一个视图生成器。...正如我们在本文的符号的动画部分已经看到的,一个带动画的SwiftUI视图可以通过一个draw()调用被绘制到Canvas中。因此,并不是所有的东西都要在Canvas里面处理。...我设法解决了这些崩溃的问题,至少使用了其中一个方法: 减少绘图量。在数字雨的例子中,你可以减少列的数量。 使用更简单的渐变。最初,数字雨柱有三个颜色的渐变。当我把它减少到两个时,崩溃就消失了。...减少更新Canvas的频率。使用较慢的时间轴视图,可以防止崩溃。 我并不是说你不能使用超过两种颜色的渐变,但这只是你可以考虑的一个地方,如果你发现自己处于Canvas崩溃的情况。...如果这还不能解决你的问题,我建议你开始删除绘图操作,直到应用程序不再崩溃。这可以引导你找到导致崩溃的原因。一旦你知道是什么原因,你可以尝试用不同的方法来做。

    2.7K10
    领券