首页
沸点
课程
数据标注
HOT
AI Coding
更多
直播
活动
APP
插件
直播
活动
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
登录
注册
Swift
项阿丑
创建于2026-01-27
订阅专栏
Swift相关知识整理
等 6 人订阅
共381篇文章
创建于2026-01-27
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
4-11.【协议导向编程】什么情况下 protocol extension 的默认实现会被覆盖?
一、一句话结论(先背下来) 否则,永远不会被覆盖。 二、唯一会被覆盖的情况(正确示例) ✅ 情况:方法在 protocol 中声明 默认实现(extension) 类型提供自己的实现 调用结果(关键)
4-10.【协议导向编程】在多协议继承时,protocol extension 的静态派发可能带来哪些坑?如何解决?
多协议继承 + protocol extension + 静态派发,如果没想清楚,非常容易写出“看起来合理、运行却诡异”的代码。 我分四步来讲,保证你听完能 一眼识别坑、知道怎么拆: 坑从哪来(本质原
4-9.【协议导向编程】举例说明 func foo() 在 protocol extension 中和 class 实现中如何产生不同结果。
一、场景一:foo() 在 protocol extension 中 1️⃣ 定义协议 + extension 2️⃣ 具体类型“实现”同名方法 3️⃣ 不同调用方式 → 不同结果 ✅ 通过具体类型调
4-8.【协议导向编程】如何避免 protocol extension 默认实现被静态派发导致的多态问题?
一、一句话总原则(先记住) 这句话几乎能解决 80% 的坑。 二、问题根源回顾(为什么会出问题) 原因只有一个: 三、7 种工程级避免方案(从强到弱) 下面是你在真实项目中 可以直接用的做法。 ✅ 方
4-7.【协议导向编程】为什么通过协议类型调用方法和通过具体类型调用方法可能行为不同?
一、先给结论(直接命中要害) 所以: 通过具体类型调用 → 编译器知道“你是谁” 通过协议类型调用 → 编译器只能看到“你承诺了什么” 这就导致: 👉 同一个对象,在不同“视角”下,调用的可能是不同实
4-6.【协议导向编程】protocol extension 的方法调用是 静态派发,这意味着什么?
一、先给一句“人话版”结论 ❌ 只写在 protocol extension 里的方法 👉 静态派发(compile-time) ✅ 在 protocol 中声明、extension 里实现的方法 👉
4-5.【协议导向编程】在设计大型系统时,如何在性能和抽象之间平衡 POP 的使用?
一、先给结论(工程经验版) 系统边界:协议优先(解耦、替换、测试) 性能核心路径:具体类型 + 泛型 + 静态派发 UI / 业务层:协议适度,避免“协议滥用” 热路径:避免 protocol exi
4-4.【协议导向编程】如何使用协议和泛型实现高度解耦的可复用组件?请举例。
我会按这个顺序来: 设计目标(为什么要协议 + 泛型) 核心思想(解耦点在哪) 完整示例:网络请求组件 为什么这套设计“真的好用” 可迁移到其他场景的通用模板 一、设计目标(现实问题) 假设你在做一个
4-3.【协议导向编程】为什么 Swift “面向协议优先于面向对象”?请结合实际案例说明。
🧠 设计动机:解决传统 OOP 的痛点 传统面向对象编程在很多大型工程里会遇到这些问题: 继承树膨胀、僵化 类层级一旦设计,就难以改动。 多重行为只能靠继承链或组合,复杂且难维护。 代码复用靠父类、造
4-2.【协议导向编程】Swift 的 POP 与 Go 或 Rust 的 trait 系统有什么异同?
一、共同点:它们在对抗“继承中心主义” 维度 Swift POP Go interface Rust trait 核心抽象 协议(Protocol) 接口(interface) trait 是否支持多
4-1.【协议导向编程】什么是协议导向编程(POP),它解决了传统面向对象设计中的哪些问题?
1️⃣ 什么是协议导向编程(POP) 协议导向编程 是 Swift 提出的编程范式,它的核心思想是: 通过协议(protocol)定义接口和行为,而不是依赖类继承。 通过协议扩展(protocol e
3-30.【函数式编程】你如何用 Monad / Functor 思想重构异步网络请求链,提高可组合性和可测试性?
1️⃣ 问题背景 传统异步网络请求链常见写法: 问题: 回调地狱,嵌套多层 不可组合,无法在不同请求间自由组合 副作用分散,难以测试 2️⃣ Functor / Monad 思想 Functor (m
3-29.【函数式编程】请解释为什么数组可以作为 Monad,并实现一个示例函数组合多个数组操作。
1️⃣ 为什么数组可以作为 Monad 在函数式编程中,Monad 的核心特征是: 容器类型,封装值 bind / flatMap:接受一个返回同类型容器的函数,并将嵌套容器“平铺” 遵循 Monad
3-28.【函数式编程】设计一个泛型函数,将任意 Monad 类型组合多个操作,要求类型安全并保持错误传播。
1️⃣ 定义 Monad 协议 2️⃣ 泛型函数:链式组合 设计一个函数: 接收一个初始 Monad 值 接收一个 操作数组,每个操作是 (A) -> Monad<A> 链式调用 flatMap,遇到
3-27.【函数式编程】讨论 Combine 的 Publisher 如何体现 Functor / Monad 特性。
1️⃣ Functor 特性在 Publisher 中的体现 Functor 核心:能够把函数映射到容器/上下文中的值,同时保持结构不变。 在 Combine 中: Publisher 可以看作一个
3-26.【函数式编程】请实现一个函数,将数组 Optional<Int> 链式组合,并在遇到 nil 时返回 nil,体现 Monad 特性。
1️⃣ 示例需求 输入:[Optional<Int>] 操作:对每个非 nil 值进行一系列转换 遇到 nil → 链式短路,返回 nil 体现 Monad 特性(flatMap 平铺容器,避免嵌套
3-20.【函数式编程】请实现一个链式调用多个可能失败的函数,并用 flatMap / map 处理错误。
1️⃣ 定义错误类型和函数 parseInt 返回 Result<Int, ParseError> addTen 和 double 返回 Result<Int, AppError> 我们将演示 链式调
3-25.【函数式编程】Monad 与 Functor 的区别?
Monad 与 Functor 的区别?Optional / Result 是如何体现 Monad 的 bind (flatMap) 语义? 1️⃣ Functor vs Monad 特性 Funct
3-24.【函数式编程】什么是 Functor?Result 和 Optional 如何实现 Functor 的 map 行为?
1️⃣ 什么是 Functor 在 函数式编程中,Functor 是一个可以 映射(map)函数到其内部值的容器类型。 定义: Functor 是一个容器类型 F<A>(如数组、Optional、Re
3-23.【函数式编程】什么是 Monoid,并给出数组或字符串的 Monoid 实例。
1️⃣ 什么是 Monoid 在 函数式编程和抽象代数中,Monoid 是一个具有以下特征的代数结构: 封闭性(Closure) 对类型 T 的任意两个值进行操作,仍然返回同类型值 Swift 示例:
下一页