Everything you care about in one place

Follow feeds: blogs, news, RSS and more. An effortless way to read and digest content of your choice.

Get Feeder

onevcat.com

OneV's Den

Get the latest updates from OneV's Den directly as they happen.

Follow now 145 followers

Latest posts

Last updated 11 days ago

编译器,靠你了!使用类型改善状态设计

11 days ago

在程序的开发和运行过程中,人往往是最不可靠的环节:一个不小心,逻辑错误(也就是 bug!)可能会悄然保留下来并进入最终的产品。与此相对,编译器要可靠得多。如果程序中存在错误,编译器通常会直接阻止生成产品。Swift 拥有非常强大的类型系统,通过它,我们可以尝试将一些运行时的逻辑“封装”到类型系统中,从而在编译期提前发现潜在的问题和错误。这种依靠类型系统来“保存”逻辑的设计方式可以称为类型状态。 一个简单例子:端到端加密 定义和使用 这个例子源自实际工作的需求。假设我们需要设计一个客户端之间的消息系统,并支持端到端加密:也就是说,这些消息可能包含用户的隐私敏感内容。在用户设备上,这些消息可以以明文形式显示,但一旦需要离开用户设备、发送到服务端(并进一步传递到另一个目标客户端),则必须加密。如果错误地将未加密的信息发送出去,可能会带来安全隐患,甚至损害用户的信任。 一个“简洁”的设计思路是设计一个带有状态的 Message,它包含文本并用一个状态来表示是否已加密: 1 2 3 4...

逆流而上的设计 - Swift 所有权和 ~Copyable

20 days ago

在 Rust 中,绝对安全和高效的内存使用得益于其独特的所有权(ownership)设计。七年前,Swift 团队发布了《所有权宣言》,以前瞻性的方式介绍了 Swift 中关于值的内存管理变化的一系列愿景。Swift 5.9 中(以和宣言里略微不同的语法)实现了这一愿景,引入了不可复制类型的标记 ~Copyable(non-copyable),以与 Rust 截然不同的(打补丁的)方式实现了更精确的所有权控制。在今年的 Swift...

Swift 6 适配的一些体会以及对现状的小吐槽

4 months ago

最近对手上的两三个项目进行了 Swift 6 的迁移,整体过程并不算顺利,颇有一种梦回 Swift 3 的感觉。不过,最终还是有所收获和心得。趁着记忆还新鲜,我想稍微总结一下。此外,针对目前社区里的一些声音,以及自己这些年的感受,我会在文章后半部分对 Swift 生态进行一些不太重要的小唠叨。 Swift 6 迁移...

SwiftLog 和 OSLog:选择、使用以及坑

7 months ago

如果你还在用 NSLog 或者 print 打 log,那也许这篇文章正适合你,可以帮你转型到新的 log 方式。如果你已经在使用 OSLog 的相关功能,那也许本文可以帮助你加深理解,以及找到一些“进阶”用法。 选择:SwiftLog 和...

深入理解 Observation - 原理,back porting 和性能

over 1 year ago

SwiftUI 遵循 Single Source of Truth 的原则,只有修改 View 所订阅的状态,才能改变 view tree 并触发对...

一些关于开发的杂谈话题 - 测试

over 1 year ago

最近接手了一些陈旧项目的维护工作,需要把一部分质量很烂的代码进行重构甚至重写。在这个过程期间,我也有机会对一些开发中比较重要的而且通用的知识进行了一点重新的思考和整理,在这里想把它们用个两三篇文章,以杂谈的方式记录一下。这些内容在我刚入门程序开发的时候困扰过我一段时间,所以虽然可能对于已经有多年经验的大佬们用处不大,但是希望新入行的同学们能通过这些话题得到一些启发,如果能减少走弯路的时间,那就更好了。 今天的第一个话题是有关测试的。在以前,我也写过一些关于测试的文章,不过更多的还是对某个特定框架的使用。我自己本身也在很长一段时间内保持了给包括框架和 app 写测试的习惯,并来回倒腾过不少不同风格的测试。在这篇短文里,我想对一些基本的问题和想法的变化进行解释。 为什么要写测试?你会给项目和代码写测试吗? 这是一个每次我去参加各种技术分享会,在结束后的自由交流环节经常会被问到的问题。 我很理解由于工期紧张、需求变动频繁等原因,导致的对测试有意无意的忽视。但在这里,我还是想给出一个关于写测试的理由的答案。如果整篇文章只有一句话值得被记住,那就是: 合理的测试保证了开发者的生活...

不知所谓的 2022 年终总结

almost 2 years ago

其实随着年龄增长,总感觉最近每年都很平淡,也几乎没有什么肉眼可见的进步。再加上疫情到了第三年,自己又长期在宅工作,无形中少了许多和这个世界接触的机会,更让自己的思想越来越僵化死板。不知道是不是因为长年在日本这种国度的关系,从感觉上来说越来越觉得这个世界固化住了。一种即视感萦绕在周围,自己却没有什么新思路,也找不到突破的方式。如何才能在这种情况下继续进步,想来应该会成为今后重要的课题。 这篇年终总结一下笔,居然发现自己整一年都脑袋空空,实在是很不应该。既然没有什么特别想要写的,那就还是先按照每个月挑选一张照片配上说明,来简单回顾一下这一整年吧。一是抒发一下心绪,二来也算是一种见证。最后阶段会依照惯例补充一些今年的好物、动漫和游戏。 如果硬要说自己对比去年有什么不同的话,大概两鬓新增的白发在寒风中所诉说的故事就是一切了。 图说 一月 姐妹两人操作香菱,帮助爸爸在璃月大地上做任务打工升级。 电子游戏早已是成熟的第九艺术,顶级的游戏必然有着顶级的图像、配乐以及故事。游戏早已是我人生中无法抹掉的印记。相比于用一些冰冷的法律法规,设置重重阻碍来限制她们的游戏时间,还不如多多引...

Swift 正则速查手册

about 2 years ago

Swift 5.7 中引入了正则表达式的语法支持,整理一下相关的一些话题、方法和示例,以备今后自己能够速查。 总览 Swift 正则由标准库中的 Regex 类型驱动,需要 iOS 16.0 或 macOS...

Xcode 中使用 SPM 和 Build Configuration 的一些坑

about 2 years ago

TL;DR 当前,在 Xcode 中使用 Swift Package Manager 的包时,SPM 在编译 package 时将参照 Build...

TCA - SwiftUI 的救星?(四)

over 2 years ago

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

TCA - SwiftUI 的救星?(三)

over 2 years ago

在上一篇关于 TCA 的文章中,我们看到了绑定的工作方式以及 Environment 在管理依赖和提供易测试性时发挥的作用。在这篇文章中,我们会继续深入,来看看 TCA 中的两个重要话题:Effect 角色到底是什么,以及如何通过组合的方式来把多个小 Feature 组合在一起,形成更加复杂的 UI 结构。...

2021 年终总结

almost 3 years ago

早晨拉开窗帘,被挡住的阳光终于像是冲开了壁障一般,肆意铺在桌面上。但是窗外被风吹得摇摇晃晃的树枝,俨然是在诉说着刚刚过去的这个夜晚是何等难熬。对它们,对我们,这个冬天似乎比以往都要寒冷,大家都盼望着春天快点到来。 习惯性地打开电脑,习惯性地泡上咖啡,突然想起已经实在是到年底了。去年的年终总结被我硬生生拖到了今年,而今年我也不想再如故蹉跎。在屋子里久了,脑子显然会不清醒,于是我决定披上外套,出门到院子里,呼吸一点新鲜空气。顺便顶着这冬日的寒风的清醒,来捋一捋今年的思绪。当然,在最后我也会整理一下今年看过的书单、动漫和玩过的游戏,算是历来年终总结的传统节目。 冬日寒风? 关于生活 疫情虽然不像去年那么热了,但也逃不出生活的主旋律之一。 金毛大统领曾经曰过“病毒会奇迹般地消失”,他在说这句话的时候,应该没有想到这个预言居然会在地球另一边的一个小岛上实现。前段时间日本疫情突然好转,据说研究团队给出的原因是 nsp14 变异导致病毒自我灭绝。不过我自己左看右看,其实应该也还是疫苗打得够集中,民众戴口罩够自觉,从而瞬间形成的免疫屏障所带来的结果。最近几天的感染数字其实又在抬...