主页
OneV's Den
Cancel

SwiftUI 遵循 Single Source of Truth 的原则,只有修改 View 所订阅的状态,才能改变 view tree 并触发对 body 的重新求值,进而刷新 UI。最初发布时,SwiftUI 提供了 @State、@ObservedObject 和 @EnvironmentObject 等属性包装器进行状态管理。在 iOS 14 中,Apple 添加了 @StateO...

最近接手了一些陈旧项目的维护工作,需要把一部分质量很烂的代码进行重构甚至重写。在这个过程期间,我也有机会对一些开发中比较重要的而且通用的知识进行了一点重新的思考和整理,在这里想把它们用个两三篇文章,以杂谈的方式记录一下。这些内容在我刚入门程序开发的时候困扰过我一段时间,所以虽然可能对于已经有多年经验的大佬们用处不大,但是希望新入行的同学们能通过这些话题得到一些启发,如果能减少走弯路的时间,那...

其实随着年龄增长,总感觉最近每年都很平淡,也几乎没有什么肉眼可见的进步。再加上疫情到了第三年,自己又长期在宅工作,无形中少了许多和这个世界接触的机会,更让自己的思想越来越僵化死板。不知道是不是因为长年在日本这种国度的关系,从感觉上来说似乎这个世界固化住了。一种即视感萦绕在周围,自己却没有什么新思路,也找不到突破的方式。如何才能在这种情况下继续前进,想来应该会成为今后重要的课题。 这篇年终总...

Swift 5.7 中引入了正则表达式的语法支持,整理一下相关的一些话题、方法和示例,以备今后自己能够速查。 总览 Swift 正则由标准库中的 Regex 类型驱动,需要 iOS 16.0 或 macOS 13.0,早期的 deploy 版本无法使用。 构建一个正则表达式的方式,分为传统的正则字面量构建,以及通过 Regex Builder DSL 的更加易读的方式。后者可以内嵌...

TL;DR 当前,在 Xcode 中使用 Swift Package Manager 的包时,SPM 在编译 package 时将参照 Build Configuration 的名字,自动选择使用 debug 还是 release 来编译,这决定了像是 DEBUG 这样的编译 flag 以及最终的二进制产品的架构。在 Xcode 中使用默认的 “Debug” 和 “Release” 之外的...

这是一系列关于 TCA 文章的最后一篇。在系列中前面的几篇里,我们简述了 TCA 的最小 Feature 核心思想,并研究了绑定和环境值的处理,以及 Effect 角色和 Feature 组合的方式等话题。作为贯穿整个系列的示例 app,现在应该已经拥有一个可用的猜数字游戏了。这篇文章会综合运用之前的内容,来看看和 UI 以及日常操作更贴近的一些话题,比如如何用 TCA 的方式展示 List...

在上一篇关于 TCA 的文章中,我们看到了绑定的工作方式以及 Environment 在管理依赖和提供易测试性时发挥的作用。在这篇文章中,我们会继续深入,来看看 TCA 中的两个重要话题:Effect 角色到底是什么,以及如何通过组合的方式来把多个小 Feature 组合在一起,形成更加复杂的 UI 结构。 如果你想要跟做,可以直接使用上一篇文章完成练习后最后的状态,或者从这里获取到...

早晨拉开窗帘,被挡住的阳光终于像是冲开了壁障一般,肆意铺在桌面上。但是窗外被风吹得摇摇晃晃的树枝,俨然是在诉说着刚刚过去的这个夜晚是何等难熬。对它们,对我们,这个冬天似乎比以往都要寒冷,大家都盼望着春天快点到来。 习惯性地打开电脑,习惯性地泡上咖啡,突然想起已经实在是到年底了。去年的年终总结被我硬生生拖到了今年,而今年我也不想再如故蹉跎。在屋子里久了,脑子显然会不清醒,于是我决定披...

在上一篇关于 TCA 的文章中,我们通过总览的方式看到了 TCA 中一个 Feature 的运作方式,并尝试实现了一个最小的 Feature 和它的测试。在这篇文章中,我们会继续深入,看看 TCA 中对 Binding 的处理,以及使用 Environment 来把依赖从 reducer 中解耦的方法。 如果你想要跟做,可以直接使用上一篇文章完成练习后最后的状态,或者从这里获取到起始...

打算用几篇文章介绍一下 TCA (The Composable Architecture),这是一种看起来非常契合 SwiftUI 的架构方式。 四年多前我写过一篇关于使用单向数据流来架构 View Controller 的文章,因为 UIKit 中并没有强制的 view 刷新流程,所以包括绑定数据在内的很多事情都需要自己动手,这为大规模使用造成了不小的障碍。而自那时过了两年后, Swif...