#swift
最近在 vibe coding 一款 macOS App,名叫 “Hassan”,具体做什么的暂且按下不表。项目在从 Xcode 16.4 升级到 26.1 后遇到了一个编译错误,花费几个小时研究明白后决定水一篇文章,整理一下这几个小时的收获。
作为 Swift 开发者,我们都热爱这门语言提供的优雅和简洁性,尤其是它的函数式编程能力。
Swift 原生提供了一些高阶函数,常见的比如 map、filter、reduce 等。这些优雅的高阶函数能够极大的简化我们的代码,但是一个不小心也会报一个让你困扰一整天的错误。
今天,我们就来看看其中一种情况。
CombineCocoa 已有一段时间未更新,但其中许多代码仍能正常工作,比如 Delegate 的这部分。
今天我们先从这部分代码入手,看看如何使用 Combine 拦截 UIKit 中的各类 delegate 对象,再深入探讨其背后的 Runtime 实现。
在 Swift 开发中,我们常常利用 extension 和 // MARK: 来划分代码逻辑,比如划分出 “Config”、“Life cycle” 等模块。然而,在使用扩展时却常常会遇到方法覆写的问题,尤其是在定义基类的“框架方法”后,子类无法正确覆写的问题。
本文将通过覆写方法,深入探讨 Swift 中的方法派发机制,并讨论如何在代码设计时规避常见坑点。
常规的在扩展中定义存储属性的方法是借助 Objective-C 的 runtime 进行属性关联。但是这个方法仅限于 ObjC 类,那么纯 Swift 类,比如结构体该怎么办呢?
在 epoxy 这个库中发现了解决办法。
虽然国内实际开发用 Swift Package Manager(后称 SPM)的比较少,但是国外的一些开源库里却经常用到。所以经常遇到项目 clone 下来之后,SPM 加载失败导致项目无法运行的问题。
网上关于 SPM 加速的文章也有很多,方法也是五花八门,本文挑选几个进行记录。