首页
沸点
课程
数据标注
HOT
AI Coding
更多
直播
活动
APP
插件
直播
活动
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
登录
注册
Swift
项阿丑
创建于2026-01-27
订阅专栏
Swift相关知识整理
等 6 人订阅
共381篇文章
创建于2026-01-27
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
7-2.【高级特性】struct、class、enum 在栈和堆中的分配差异是什么?
一、先给结论版(重要) 但在绝大多数常见场景下: 类型 本体通常在哪里 变量里存的是什么 struct 栈 / 内嵌在宿主对象中 实际数据 enum 栈 / 内嵌 实际数据(含 tag) class
7-1.【高级特性】值类型和引用类型在内存布局和 ARC 管理上有何差异?
一、内存布局上的差异 1️⃣ 值类型(Value Type) 典型代表:struct、enum、tuple、基本类型(Int、Double) 📦 内存存储方式 直接存储数据本身 通常分配在: 栈(St
6-30.【架构设计】架构设计中,什么是“延迟决策(Delay Decision)”?真实项目中是如何用它避免架构过早僵化的?
一、概念:延迟决策(Delay Decision) 目标:避免早期猜测导致架构僵化 核心原则:面向抽象、保持可替换性 本质是“先定义接口 / 协议 /抽象,后选择实现”,而不是一开始就固定实现方案 二
6-29.【架构设计】如果一个模块被 10 个模块依赖,如何设计它的 API?
一、设计原则 最小接口原则(Interface Segregation) 提供尽量精简、单一职责的 API 不暴露内部实现细节 依赖方只看到它需要的功能 稳定性优先 依赖方越多,API 越难改动 尽量
6-28.【架构设计】如何避免ViewModel/Presenter反向依赖UI层?在SwiftUI中这个问题更难还是更容易?
一、问题本质 反向依赖会导致: 模块耦合:UI 改动 → 逻辑层也必须改 测试困难:无法在不加载 UI 的情况下测试业务逻辑 可替换性差:逻辑层无法被不同 UI 重用 二、常见反向依赖形式 直接引用
6-27.【架构设计】依赖注入(DI)最容易被滥用的地方是什么?构造注入、属性注入、环境注入,各自的坑在哪里?
一、构造注入(Constructor / Init Injection) ✅ 优点 依赖明确:实例一创建就完整 不可变性:依赖不能被随意修改 → 模块边界清晰 易测试:可以直接传入 Mock ⚠️ 滥
6-26.【架构设计】为什么“protocol+default implementation”有时会破坏架构边界?请从派发和依赖方向角度解释。
一、问题根源:Swift 的派发机制 协议方法的派发规则 Protocol requirement(协议声明的方法): 如果被类实现 → 动态派发(类似虚方法) 如果通过协议类型调用 → 动态派发 P
6-25.【架构设计】什么才是真正的“模块边界”?target、framework、SPM package、protocol,哪个才是核心?
一、模块边界的本质 特点: 隐藏实现 模块内部细节不暴露 外部只能依赖公开接口 单向依赖 外部可以依赖模块,但模块不依赖外部(或最少依赖) 可替换 / 可测试 可以 mock / stub 模块接口
6-24.【架构设计】并发(async/await)出现后,响应式架构是否“过时”?如何在一个项目中同时使用它们而不混乱?
一、本质对比:async/await vs 响应式流 特性 async/await 响应式流 (Combine/Rx) 时间模型 单值异步操作,顺序完成 多值随时间流动,可组合、可取消 核心问题 “如
6-23.【架构设计】响应式系统中,为什么“取消(Cancel)”是架构能力的一部分?如果忽略取消,会发生什么?
一、本质:Cancel 的角色 在响应式系统中(Combine / Rx / TCA / Redux Observable): 核心理念: 时间流不等于事件流完成 Cancel = “我不再关心这个流
6-22.【架构设计】Combine中AnyPublisher的代价是什么?什么时候你会刻意避免类型擦除?
一、本质:AnyPublisher 是什么 AnyPublisher<Output, Failure> 本质上是 类型擦除 (Type Erasure) 的 Publisher: Combine 中大
6-21.【架构设计】响应式链条中,副作用应该放在哪里?为什么很多项目最后会“响应式外壳+命令式内核”?
一、原则:副作用放的位置 1️⃣ 核心原则 换句话说: Reducer = 纯函数,不执行网络 / DB / UI Effect / SideEffect = 可组合、可取消、可追踪的副作用 2️⃣
6-20.【架构设计】Combine / Rx 中,map / flatMap / switchLatest 的本质区别是什么?在架构层面你如何选择?
一、本质区别 假设有一个 Publisher(Combine / Rx): 你想根据它生成 B 类型的数据流,可以用 map / flatMap / switchLatest,但它们的处理方式本质不同
6-19.【架构设计】响应式编程解决的核心问题是什么?为什么它不是“异步的高级写法”?
一、核心结论(工程直觉) 换句话说,它解决的不是“异步”,而是状态随时间变化的传播和组合问题。 二、传统问题 在传统命令式或回调式代码中,我们经常遇到: 状态依赖难管理 a 改了 b 也要改 b 改了
6-18.【架构设计】如何设计 State 才能做到:UI 可预测 + 易调试 + 易回滚?
一、目标拆解 你希望 State 具备: UI 可预测 每次 State 改变 → UI 渲染可预期 没有隐藏副作用,避免“偶发性闪烁/错误” 易调试 可以追踪“谁改了 State、什么时候改的、为什
6-17.【架构设计】SwiftUI/TCA 中,为什么“State 变化频率”比“State 大小”更危险?请从 渲染 + ARC + diff 的角度解释。
一、结论先行 换句话说:大 State 偶尔改没问题,小 State 高频改也能炸。 二、渲染角度(Render) 1️⃣ SwiftUI 的渲染机制 State 改变 → SwiftUI 标记依赖该
6-16.【架构设计】在并发场景下,State的一致性如何保证?你更倾向于:锁、Actor、不可变数据,还是 reducer?
一、问题本质 在并发场景下,State 的核心问题是: 例如 SwiftUI / TCA 中: 如果没有约束: 最终状态可能不是任何一个动作的正确结果 UI 会显示“半更新”或“回退” Bug 随机出
6-15.【架构设计】State和Derived State(派生状态)应该如何区分?错误区分会带来哪些 一致性和性能问题?
这是一个所有“状态驱动 UI”体系的核心问题。 如果把它搞清楚,SwiftUI / TCA / Redux / Jetpack Compose 的 80% 性能与一致性问题都会自动消失。 什么是 St
6-14.【架构设计】在大型App中,全局State一定是反模式吗?什么情况下是灾难,什么情况下反而是最优解?
“全局 State 是不是反模式”本身就是一个误导性命题——真正的问题不是 全不全局,而是: 一句话结论(先给判断) 一、为什么“全局 State”会被骂成反模式? 因为历史上它常常长这样👇 灾难不是
6-13.【架构设计】什么是“单向数据流”?它解决的是什么问题?
一句话定义(不是教科书版) 换句话说: 没有: View 直接改 State A 改 B,B 又反改 A “我也不知道是谁动了它” 一、单向数据流出现之前,世界有多糟? 典型的“双向地狱”(UIKit
下一页