首页
沸点
课程
数据标注
HOT
AI Coding
更多
直播
活动
APP
插件
直播
活动
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
登录
注册
Swift
项阿丑
创建于2026-01-27
订阅专栏
Swift相关知识整理
等 6 人订阅
共381篇文章
创建于2026-01-27
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
5-1.【性能分析与优化】性能瓶颈最常见出现在哪些层面?如何定位出来的?
一、最常见的 Swift 性能瓶颈层面 1️⃣ 值类型(struct / enum)的拷贝与 Copy-on-Write 常见问题 大 struct 在频繁传参、返回 Array / Dictiona
4-30.【协议导向编程】结合实际项目经验,谈谈使用 POP 遇到的挑战以及解决方案。
一、常见挑战与原因 挑战 原因 协议数量膨胀(协议爆炸) 每个小能力都单独抽象 → 模块复杂度增加 默认实现静态派发导致多态问题 protocol extension 默认静态派发 → 协议类型调用行
4-29.【协议导向编程】POP 如何帮助大型工程实现高内聚、低耦合,同时提升测试覆盖率?
一、核心原理 协议 = 能力契约 抽象行为而非具体类型 模块只依赖协议 → 低耦合 协议扩展 = 默认实现 / 模板方法 提供通用逻辑 conforming 类型可覆盖 → 保持灵活性 类型组合 +
4-28.【协议导向编程】如何用协议约束实现异步流水线或数据流处理?
一、核心原理 协议抽象能力 每个流水线节点可以抽象成一个能力协议(例如 Processable 或 AsyncStep) 模块间只依赖协议 → 解耦 协议扩展提供默认实现 可提供模板方法、通用逻辑、错
4-27.【协议导向编程】如何结合 POP 和泛型,实现跨模块可复用的业务逻辑?
一、核心原理 协议(Protocol) 描述业务能力或契约 → 不关心具体类型 模块间只依赖协议,降低耦合 泛型(Generic) 在编译期绑定类型 → 静态派发,高性能 支持值类型 + class
4-26.【协议导向编程】在复杂业务模块中,如何使用 POP 构建可组合的功能单元?
一、核心思想 POP 的关键理念是: 协议 = 能力契约 每个功能单元对应一个协议,描述它能做什么 协议扩展 = 默认实现 提供通用行为模板 类型可以选择覆盖 类型组合协议 = 功能组合 struct
4-25.【协议导向编程】如何在大型项目中管理协议数量,避免“协议爆炸”?
一、协议爆炸的根源 每增加一个小功能就创建一个协议 结果:几十、上百个小协议 → 难以追踪 协议职责不清 一个协议承载多个能力 → 后续扩展难以组合 缺乏层次化 / 模块化 协议散落在全局 → 难以归
4-24.【协议导向编程】当一个协议需要频繁扩展方法时,你会采用哪些设计策略?
一、核心原则 协议只抽象核心行为 避免把大量工具方法直接加到协议中 核心方法 → 多态点 可复用辅助方法 → 放到 protocol extension 或独立协议 用扩展(extension)提供默
4-23.【协议导向编程】结合单元测试和依赖注入,说明协议如何降低耦合度。
一、核心原理 协议 = 能力契约 模块 A 只依赖协议,而不依赖具体类型 B 模块之间只约定“能做什么”,不关心“怎么做” 依赖注入(Dependency Injection, DI) 在对象初始化或
4-22.【协议导向编程】如何设计协议,使其既能抽象业务逻辑,又不影响性能?
一、核心原理 协议本身不影响性能 协议声明仅定义行为契约 → 无开销 默认实现(protocol extension)默认静态派发 静态派发零开销 → 高性能 协议类型调用 (existential)
4-21.【协议导向编程】为什么在模块边界处使用协议可以增强测试和解耦?
一、核心原理 1️⃣ 协议 = “行为契约” 协议只关心能力(what can be done),而不关心具体实现(how it’s done) 当模块 A 依赖模块 B 时,如果模块 A 只依赖协议
4-20.【协议导向编程】举例说明如何将一个典型 OOP 架构(如 MVC)改造为 POP 架构。
一、典型 OOP MVC(面向对象) 特点: User / UserView / UserController 都是 class Controller tightly coupled User 和 U
4-19.【协议导向编程】在什么场景下仍然推荐面向对象而不是面向协议?
一、核心原则 二、典型推荐 OOP 的场景 场景 原因 示例 1️⃣ UIKit / AppKit 或其他框架依赖类层级 框架 API 已经用 class、多态依赖 vtable UIView 子类化
4-18.【协议导向编程】如何使用 POP 替代多重继承或菱形继承问题?
一、问题回顾:多重继承 / 菱形继承 假设在 OOP 中,你想组合行为: 菱形继承问题: D 从 B 和 C 都继承了 A 的方法 → 谁的实现优先? 语言复杂规则 → 容易出 bug Swift/J
4-17.【协议导向编程】在继承体系复杂的项目中,为什么 POP 比传统 OOP 更可维护?
一、核心原因一句话总结 二、继承体系复杂的 OOP 问题 假设你有一个传统 OOP 项目: 常见问题: 深继承树 IconButton 继承 Button → RoundedIconButton 继承
4-16.【协议导向编程】面向协议和面向对象设计的核心区别是什么?
一、核心区别一句话 特性 面向对象设计 (OOP) 面向协议设计 (POP) 核心思想 继承 hierarchies → 类型之间的 is-a 关系 行为契约(protocol) → 类型之间的 ca
4-15.【协议导向编程】当多个协议同时提供相同方法的默认实现时,如何保证调用行为可预测?
一、问题本质 二、典型踩坑示例 分析: foo() 在 A 和 B 的 extension 中都是静态方法 X conform 两个协议 → 没有真正的 override 关系 a.foo() 和 b
4-14.【协议导向编程】举例说明 default implementation 导致 bug 的场景,以及如何规避。
一、场景说明:默认实现破坏多态 背景 假设你在写一个 缓存协议 Cache,希望: 提供默认实现 clear() 不同缓存类型(MemoryCache / DiskCache)可以覆盖 1️⃣ 协议
4-13.【协议导向编程】如何在 protocol 中提供默认实现,同时保证子类型可重写?
一、核心原则 协议声明 = “多态契约” extension 默认实现 = “默认行为” conforming 类型实现 = “覆盖(override)默认行为” 二、最小示例 输出: ✅ 默认实现被
4-12.【协议导向编程】为什么 protocol extension 中提供默认实现可能破坏多态行为?
一、核心原理 静态派发(Static Dispatch) :调用方法时,编译器在编译期就决定调用哪一个实现。 动态派发(Dynamic Dispatch / Witness Table) :调用方法时
下一页