Shaula Blog

美丽的东西都是肤浅的

Objective-C 前向声明

Objective-C 前向声明: 不止是解决循环引用 很多人学 @class 只是为了解决那个“A 里套 B,B 里套 A”的循环引用报错。其实前向声明真正的能耐远不止这点——它更像一个“编译期防火墙”,用好了能让你从无尽的重新编译里解脱出来。咱们今天把它掰开揉碎,顺便把容易踩坑的地方和更多玩法都聊透。

Swift 6.1 Package Traits:让依赖管理更灵活

Swift 6.1 Package Traits:让依赖管理更灵活 Swift 6.1 引入的 Package Traits 为 Swift Package Manager 带来了更灵活的条件编译和可选依赖管理能力。 为什么需要它? 实际开发中经常遇到这些问题: 可插拔依赖:比如 Swift OpenAPI Generator 支持 URLSession、AsyncHTTPClient、Vapor 等多种传输层。为了不把全部依赖都打进二进制,往往要拆成多个仓库,维护和发现都麻烦。 平台差异:Apple 平台用 OSLog,服务器端用 swift-log,需要一种优雅的方式来处理这种差异。 实验性 API:想发布新功能但又不想承诺稳定 API,加下划线或特殊注解会影响代码补全,不够理想。 基本用法 在 Package.swift 中定义特性:

Swift - LRU 缓存

Swift - LRU 缓存 什么是 LRU 缓存? LRU(Least Recently Used,最近最少使用)是一种缓存淘汰策略。当缓存满了,它会优先删除最久没被访问的数据,保留最近刚用过的。

iOS 跨平台代码中通过条件编译导入 UIKit 框架代码

iOS 跨平台代码中条件编译 在 iOS 开发中,跨平台代码的条件编译是构建通用框架和组件的常见需求。当你需要针对不同的 Apple 系统平台进行代码适配时,#if canImport(UIKit) && !os(watchOS) 和 #if os(iOS) 这两种条件编译写法各有适用场景。本文将深入解析它们的本质区别,并提供清晰的选用指南。

Swift 中的 @preconcurrency

Swift 中的 @preconcurrency 随着 Swift 并发模型的成熟,开发者在集成旧代码或第三方库时面临着一个挑战:如何在严格的并发检查下使用非并发安全的 API?@preconcurrency 属性包装器正是为解决这一问题而生。