首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

肘子的 Swift 周报 #001

解密 SwiftUI 背后的 AttributeGraph[12] KyleSwifter[13] 在工作中,作者发现在 watchOS 10 上的某段代码会出现 AttributeGraph 的循环依赖错误提示...得益于字节跳动和作者对 SwiftUI 底层的研究,我们有机会窥探 AttributeGraph: cycle detected through attribute 问题出现的原因。...Kyle 不久前启动了 OpenSwiftUI[14] 项目,该项目的目标是创建尽可能接近 SwiftUI 原始 API 的实现。...作为 A Companion for SwiftUI[17] 的作者,Javier SwiftUI 发布初期就表现出对 SwiftUI 的动画和布局实现的浓厚兴趣,并通过博客展示了令人惊叹的研究成果.../ [11] 此处: https://objccn.io/products/thinking-in-swiftui-2023 [12] 解密 SwiftUI 背后的 AttributeGraph:

22840

肘子的 Swift 周报 | Swift,超越苹果生态!

在这个新版本中,首次非苹果平台复刻了 SwiftUI 框架的核心基础——AttributeGraph,从而具备了完整地将 SwiftUI 的优势全面带到其他平台的可能性。...Adaptive Text Color in SwiftUI based on Background[16] Pedro Rojas[17] 开发过程中,开发者时常遭遇这样一个问题:相同颜色的文字不同背景色上可能难以辨认...转向 AppKit 的过程中,他探讨了一些鲜为人知的 AppKit 组件,如 NSTableHeaderCell 等,并通过 NSViewRepresentable构建了 SwiftUI 与 AppKit...文章中,作者强调他的目的并非是要比较 SwiftUI 与 AppKit 的性能优劣,或者质疑 SwiftUI macOS 上的应用适用性。...实际上,该应用的复杂模板编辑器几乎完全使用 SwiftUI 开发,且表现出色。这一点彰显了 SwiftUI 实际应用中的强大潜力和灵活性。

10710

避免 SwiftUI 视图的重复计算

通过 _makeProperty 方法,SwiftUI 得以实现在将视图加载到视图树时,把所需的数据( 值、方法、引用等 )保存在 SwiftUI 的托管数据池中,并在属性图( AttributeGraph...当 SwiftUI 将视图加载到视图树时,通过调用 _makeProperty 完成将数据保存到托管数据池以及属性图中创建关联的操作,并将数据托管数据池中的引用保存在 _location ( AnyLocation...并且 SwiftUI 会在其变化时自动更新( 重新计算 )对应的视图。 SwiftUI 上有一个困扰了不少人的问题:为什么无法视图的构造函数中,更改 State 包装的变量值?...、应用性能表现、测试难易度等方面取得平衡 不存在完美的解决方案,即使像 TCA 这类的热门项目,面对切分粒度高、层次多的 State 时,也会有明显的性能瓶颈 视图的构造参数 尝试改善 SwiftUI...例如:当 SwiftUI 更新 ContentView 时,如果 SubView 的构造参数( name 、age )的内容发生了变化,SwiftUI 会对 SubView 的 body 重新求值(

9.1K81

ViewBuilder 研究(下) —— 从模仿中学习

(结构值,非 body 值)将被保存在 SwiftUI 的托管数据池中 根据视图的依赖信息 AttributeGraph 数据池中创建与当前显示的视图树对应的依赖图,并监控依赖的变化 依据 SwiftUI...这是因为 SwiftUI 诞生时,result builders 使用 buildIf 来处理不包含 else 的 if 语句。...我们可以通过如下的方式 SwiftUI 中验证上述代码: SwiftUI 环境中添加如下代码 public extension ViewBuilder { static func buildOptional...由于 SwiftUI 通过视图层次结构中的类型和位置来对视图进行标识,AnyView 将会擦除(隐藏)掉这些重要的信息,因此除非到了必须使用的地步,否则我们应尽量避免 SwiftUI 中使用 AnyView...开发者通过 Modifier 视图中表述自己的想法,SwiftUI 只会在布局和渲染时才会真正调用这些 modifier 的实现。

3K20

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

预览含有Core Data元素的视图时崩溃的出现次数会愈发频繁,某种程度上可能已经影响了开发者SwiftUI中使用Core Data的热情。...结合两年来我SwiftUI中使用Core Data的经验和教训,我们将在本文中探讨: •导致SwiftUI预览崩溃的部分原因•如何在之后的开发中避免类似的崩溃出现•如何在Xcode中安全可靠地预览含有...应用程序在运行至该视图时会直接崩溃SwiftUI提供的managedObjectContext环境值为视图中使用或操作Core Data元素提供了基础和便利。...常见的Core Data元素视图预览故障 应用程序可以正常执行的情况下,真正由于Core Data因素导致的预览崩溃的原因其实并不多。...希望本文对你SwiftUI中使用Core Data有所帮助。

5.1K10

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

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

42910

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

UIKit中,每个视图都来自一个名为UIView的类,该类具有许多属性和方法:背景色,确定其放置方式的约束,用于将其内容呈现到其中的图层等等。...UIKit中,UIStackView是一种非渲染视图类型,旨在简化布局,但这意味着即使它因为继承的原因具有背景色,也​​从未真正使用过。...SwiftUI中,我们所有的视图都是简单的结构体,几乎可以自由创建。想想看:如果您制作一个仅包含一个整数的结构体,则结构体的整个大小就是:一个整数。没有其他的。...通过生成不会随时间变化的视图,SwiftUI鼓励我们转向更具功能性的设计方法:将数据转换为UI时,我们的视图变成简单的,惰性的东西,而不是会失去控制的智能化的东西。...提示:如果您在视图中使用类,则可能会发现代码无法编译或在运行时崩溃。 相信我:使用结构体。

3.1K10

SwiftUI 动画进阶 — Part 5:Canvas

然而,该视图产生的崩溃使这里的一些例子无法分享。虽然不是所有的问题都得到了解决,但现在每个例子都能顺利运行。文章的最后,我将指出我找到的一些解决方法。...Canvas 视图有一种引用 SwiftUI 视图的方式,将其解析为一个符号,然后绘制它。 要解决的视图是ViewBuilder闭包中传递的,如下面的例子所示。...每一列都被实现为一个单独的SwiftUI视图。叠加字符和用渐变绘图是由视图处理的。当我们画布上使用渐变时,起始/结束点或任何其他几何参数都是相对于整个画布的。...Canvas 崩溃 不幸的是,写这篇文章的时候,我遇到了 Canvas 的一些崩溃问题。幸运的是,它们每个测试版中都有很大的改进。我希望iOS15正式发布时,它们都能得到解决。...总结 我希望这篇文章能帮助你为你的SwiftUI动画工具箱添加一个新的工具。第五部分的动画系列到此结束。至少今年......谁知道WWDC'22会带来什么呢!

2.6K10

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

UIKit 中,每个视图都来自一个名为UIView的类,该类具有许多属性和方法:背景色,确定其放置方式的约束,用于将其内容呈现到其中的图层等等。... UIKit 中,UIStackView 是一种非渲染视图类型,旨在简化布局,但这意味着即使它因为继承的原因具有背景色,也从未真正使用过。... SwiftUI 中,我们所有的视图都是简单的结构体,几乎可以自由创建。想想看:如果您制作一个仅包含一个整数的结构体,则结构体的整个大小就是:一个整数。没有其他的。...通过生成不会随时间变化的视图,SwiftUI 鼓励我们转向更具功能性的设计方法:将数据转换为 UI 时,我们的视图变成简单的,惰性的东西,而不是会失去控制的智能化的东西。...**提示:**如果您在视图中使用类,则可能会发现代码无法编译或在运行时崩溃

2.4K50

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

在这篇文章中,我们将探讨几个 SwiftUI 开发中经常使用且至关重要的属性包装器。本文旨在提供对这些属性包装器的主要功能和使用注意事项的概述,而非详尽的使用指南。...@State @State 是 SwiftUI 中最常用的属性包装器之一,主要用于视图内部管理私有数据。它特别适合存储值类型数据,如字符串、整数、枚举或结构体实例。...复杂的视图层级中,逐级传递 @Binding 可能导致数据流难以追踪,此时应考虑使用其他状态管理方法。 确保 @Binding 的数据源是可信的,错误的数据源可能导致数据不一致或应用崩溃。...由于默认值的存在,@Environment 不会因缺少值而导致应用崩溃,但由此也容易产生开发者忘记注入值的情况。...这减少了因遗漏数据注入而导致的应用崩溃风险。 Observation 框架的背景下,@State 和 @Environment 成为了最主要的属性包装器。

16410

肘子的 Swift 周报 #022 | 忙碌的一周

而今,Swift 5.10 启用完整并发检查选项后,将强制语言的所有方面实施完全的数据隔离,以编译时检查为手段确保安全。...近期推荐 SwiftUI-First Architecture[7] Mike Apurin[8] 自 SwiftUI 问世以来,寻找最合适的架构便成为了广受关注的议题。...Mike Apurin 尝试传统框架模式后发现这些方法未能满足他的需求,因此他倡导了一种 “SwiftUI-first” 的架构理念。...他所推崇的 SwiftUI-first 架构,强调了灵活性与可扩展性,鼓励开发者充分利用 SwiftUI 的最新功能,并根据各自项目的需求灵活调整架构,以达到最佳的应用表现。...虽然介绍特定优化技巧的文章不在少数,但像本文这样对整个应用优化过程进行深入分析的内容却相对罕见,对开发者而言具有极高的参考价值。

8410

开发人员需要了解的 iOS 14 beta 5 更新

开发者可以 设置 -> 通用 -> 软件更新 中安装更新。...用户也可以输入时间,也可以通过滚轮来调整时间,不过滚轮是直接嵌输入框中; 调整了 HomeKit 控制中心的 “收藏夹” 组织方式及图块的大小; 设置 中,添加了禁用应用程序“照片” 中隐藏相册的功能...如果启用了该通知,则受支持的应用程序启动时,会在顶部收到通知,所以用户可以自行选择是否启用; 设置 中新增了针对开发人员的 App Clip 新测试功能; 新的小部件位置访问请求的; 快捷指令...之前向已移除的观察者发送信号时,会导致难以诊断的崩溃问题,现在则会产生一个异常,指出需要 removeObserver(_:) 哪些对象。...这让绘制网格的顺序更能影响最终图像; 可以使用 INMediaUserContext, Core Spotlight, 和 Intents 来改善多媒体交互应用; SwiftUI 除了解决了部分问题外,

95210

SwiftUI 状态管理系统指南

SwiftUI没有使用委托、数据源或任何其他UIKit和AppKit等命令式框架中常见的状态管理模式,而是配备了一些属性包装器[1],使我们能够准确地声明我们的数据如何被我们的视图观察、渲染和改变。...因此,最常见的做法是将State属性包装器保持为私有,这可以确保它们只该视图的主体内被改变(试图在其他地方改变它们实际上会导致运行时崩溃)。...观察对象 State和Bingding的共同点是,它们处理的是SwiftUI视图层次结构本身中管理的值。...观察和修改环境变量 最后,让我们来看看SwiftUI的环境系统如何被用来两个互不直接连接的视图之间传递各种状态。...小结 SwiftUI管理状态的方式绝对是该框架最有趣的方面之一,它可能需要我们稍微重新思考数据应用中的传递方式——至少涉及到将被我们的UI直接消费和修改的数据时是这样。

5K20

Swift 周报 第四十一期

周报精选 新闻和社区:现推出超过 30 个新的开发者活动 提案:全局变量的严格并发性 Swift 论坛:Swift 6 语言模式的进展 推荐博文:Swift 中的崩溃回溯 话题讨论: 如果公司市中心,... Swift 5.9 版本之前,一旦你的程序运行失败,你只能看到来自父进程(通常是 shell )的消息告诉你子进程崩溃了。而现在,你得到的信息将会更具有详细性。...许多情况下,你可能会发现你终端开发的程序崩溃了,但你无法复现问题。没有适当的崩溃日志,这可能会让你非常沮丧,你知道你的程序有一个 bug ,但你不知道问题出在哪里,也不知道如何复现它。...这个特性的主要思想就是程序崩溃后将其挂起,从而给你机会附加一个调试器,或对崩溃过程进行更深入的查看。 最后,后退功能支持结构化并发,并且能够正确地逆向穿过异步框架。...SwiftUI 中的 visual effects[11] 摘要: 这篇博客介绍了 SwiftUI WWDC2023 中引入的一种叫做 visualEffect 的新视图修饰符。

20140

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

保证应用不因 Core Data 的原因导致意外崩溃是对开发者的起码要求。...SwiftUI 与 Core Data —— 问题[1]SwiftUI 与 Core Data —— 数据定义[2]SwiftUI 与 Core Data —— 数据获取[3]可以 此处[4] 获取演示项目...并没有出现崩溃的情况。难道我们上面的论述都是错误的?由于 Core Data 模版代码中,只使用了一行代码来声明次级视图:Text("Item at \(item.timestamp!... convertToValueType 中为属性提供备选值,是否可以避免出现崩溃的情况?答案是,原始的版本仍可能会出现问题。..._object.convertToValueType() }}如此一来,便可以通过视图代码使用 if let 来保证不会出现上文提到的崩溃问题:public struct Cell: View

3.2K20
领券