老司机 iOS 周报 #220 | 2022-10-24

3,028 阅读4分钟

ios-weekly.png 老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

文章

🐢 A Possible Vision for Macros in Swift

@kemchenj:前一段时间 Swift 团队决定将编译器的 Parser 改为使用 Swift 实现,并且将这一部分功能内置到 SwiftSyntax 里。

这意味着 Swift 成为了语法 API 的一等公民,我们可以很便捷地在 Swift 代码里里访问和修改自身(源代码),更进一步地说,我们可以通过代码去编写代码。

如果把这个功能集成到编译器和语法里,就成了我们熟知的宏 (macro)。趁着这个机会,Swift 团队思考了后续如何借助这套 API,提供宏的实现,并且分享了初步的设计思路到论坛里,希望大家可以一起参与讨论。

以往很多硬编码在编译器里的功能都可以改为通过宏系统进行实现,例如 Equatable/Hashable 的实现自动合成等等:

extension Equatable {
  macro func ==(lhs: Self, rhs: Self) -> Bool
}

🐎 Which Collection?

@Smallfly:集合(Collection)是编程语言常用的类型,Swift 集合是值类型的,对于复杂的集合数据,频繁拷贝可能会带来性能问题。本文通过一个数独算法,介绍如何对数组做优化,主要利用了 some 关键字配合 Swift 5.7 协议支持关联类型的新特性实现。想了解更多请参考 SE-0346

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

@红纸:经喵神的相关测试发现,在 Xcode 中使用 SPM 的包编译时将参照 Build Configuration 的名字,自动选择使用 DEBUG 还是 RELEASE 模式来编译,这将导致编译宏、编译配置等一系列因素影响最终的二进制产物。

规则:若名字里包含有 Debug 或者 Development(不区分大小写)则选择 DEBUG 模式,反之则选择 RELEASE 模式。

🐕 iOS 灵动岛开发实践

@anotheren:灵动岛是 Apple 为 iPhone 14 Pro 系列带来的下一代交互体验。在 iOS 16.1 中,相关 API 已向开发者开放,并仅提供了 SwiftUI 版本的接口。本文从电商角度,带来了灵动岛开发的入门实践。但是并非所有功能都适合在灵动岛上展示,推荐核对 Apple 的人机交互设计指南中的 Live Activities 部分。

🐢 Swift Concurrency – Things They Don’t Tell You

@Cooper Chen:Swift Concurrency 提供了一种非常好的编写异步代码的方法,同时它也被宣传为使用安全。然而不幸的是 Swift Concurrency 编程有很多陷阱,而且编译器不会检查所有东西

  • 如果使用 async 关键字,确保在后台线程上调用,否则需要添加 @MainActor 属性
  • Swift Actor 不能保证在使用过程中避免数据竞争,不保证异步方法在调用另一个方法之前会被完全处理
  • 避免将锁和信号量等经典的同步方法与 Swift Concurrency 混合使用
  • 设置 Task 优先级,避免在单个队列上分派所有内容
  • 避免在 Task 中进行繁重的同步工作,例如当需要像图像处理这样的繁重工作时,请使用自定义 DispatchQueue
  • 必要时请使用 await Task.yield() 允许更频繁地切换任务

代码

灵动岛开发示例代码

@anotheren:这是一份灵动岛开发的示例代码,包含了多个实例的展示,你可以结合上面灵动岛开发实践一起食用更佳。

音视频

Swift 视频教程 ChaoCode

@EyreFree:Swift 视频教程 ChaoCode 从 油管 入驻 B 站,从基础的 Swift 语法到中级 Swift 内容、 SwiftUI、用 Swift 制作完整 App 等都有,比较适合入门学习 Swift,感兴趣的朋友可以关注。

KeithBird 推荐

摸鱼周报

@摸鱼周报 #72:第 72 期摸鱼周报来了,一起来看下本期概要:

  • 本期话题:1024 程序员节在各个技术网站已经开始预热,有不少奖品可以捞一捞;App Store 现已开放 iOS 16.1 和 iPadOS 16.1 App 提交
  • 本周学习:当设置 UIImageView 高亮时,会暂停当前的动画;Xcode 14 编译包在 iOS 12.2 以下设备崩溃的解决方案
  • 内容推荐:灵动岛有很多玩法还待探索,本期推荐一些相关文章
  • 摸一下鱼:CleverToolKit:iOS 开发者辅助工具,页面简洁,体积小巧。目前包含 json2model 功能。

关注我们

我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。

关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参

同时也支持了 RSS 订阅:github.com/SwiftOldDri…

说明

🚧 表示需某工具,🌟 表示编辑推荐

预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)