About OneV | 王巍

开发者,专注于 iOS 和 Swift 方向。Kingfisher 作者。创办 ObjC 中国。

The RSS's url is : https://onevcat.com/feed.xml

Please copy to your reader or subscribe it with :

Preview of RSS feed of OneV | 王巍

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

1970-01-01 08:00:00

最近对手上的两三个项目进行了 Swift 6 的迁移,整体过程并不算顺利,颇有一种梦回 Swift 3 的感觉。不过,最终还是有所收获和心得。趁着记忆还新鲜,我想稍微总结一下。此外,针对目前社区里的一些声音,以及自己这些年的感受,我会在文章后半部分对 Swift 生态进行一些不太重要的小唠叨。 Swift 6 迁移 Swift 6 的最大“卖点”当然是并发编程和编译时就能保证的完全线程安全,这也是在进行 Swift 6 迁移时开发者工作量最大的来源。通过引入一系列语言工具 (主要是 actor 隔离和 Sendable 标注),Swift 6 在开启完全的严格并发检查 (也就是-strict-concurrency=complete) 时,理想状态下可以完全确保在编译阶段就将数据竞争 (data race) 和线程问题排除掉。 关于 Swift 并发编程,我之前写过一些关于并发初步以及结构化并发的文章。对于 actor、Sendable 的概念及其如何确保数据竞争不再发生,我在《Swift 异步和并发》中也有所介绍。近几年的 WWDC 上,Apple 通过若干 sessio...

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

1970-01-01 08:00:00

如果你还在用 NSLog 或者 print 打 log,那也许这篇文章正适合你,可以帮你转型到新的 log 方式。如果你已经在使用 OSLog 的相关功能,那也许本文可以帮助你加深理解,以及找到一些“进阶”用法。 选择:SwiftLog 和 OSLog 的区别 两者都是 Swift 中与 log 有关的框架。在进行选择时,我们的首要任务就是理清它们的区别。“SwiftLog 和 OSLog 我应该选哪个”,也是我在参加一个聚会时经常听到的问题。 SwiftLog 是前端 SwiftLog 首次发布于 2019 年,是一个 Swift server 主导的项目。它的目的是提供一个统一的日志记录接口,让包括服务器 app、命令行工具以及 iOS 和 macOS app 等各种使用 Swift 语言的场合下 (但主要是 server!),能使用同样的方法记录日志。SwiftLog 本身是一个 log 前端框架,这意味着它需要搭配后端使用:例如将日志输出到控制台、文件、数据库或远程日志收集服务。SwiftLog 注重模块化,允许开发者通过更换后端来灵活调整日志记录的行为。 OS...

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

1970-01-01 08:00:00

SwiftUI 遵循 Single Source of Truth 的原则,只有修改 View 所订阅的状态,才能改变 view tree 并触发对 body 的重新求值,进而刷新 UI。最初发布时,SwiftUI 提供了 @State、@ObservedObject 和 @EnvironmentObject 等属性包装器进行状态管理。在 iOS 14 中,Apple 添加了 @StateObject,它补全了 View 中持有引用类型实例的情况,使得 SwiftUI 的状态管理更加完善。 在订阅引用类型时,ObservableObject 扮演着 Model 类型的角色,但它存在一个严重的问题,即无法提供属性粒度的订阅。在 SwiftUI 的 View 中,对 ObservableObject 的订阅是基于整个实例的。只要 ObservableObject 上的任何一个 @Published 属性发生改变,都会触发整个实例的 objectWillChange 发布者发出变化,进而导致所有订阅了这个对象的 View 进行重新求值。在复杂的 SwiftUI 应用中,这可能会导致严...

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

1970-01-01 08:00:00

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

不知所谓的 2022 年终总结

1970-01-01 08:00:00

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