<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>第三篇 自定义类型与抽象 on 编程那些事儿</title><link>https://before80.github.io/prgms/Swift/basic/Part-3-Types-and-Abstraction/</link><description>Recent content in 第三篇 自定义类型与抽象 on 编程那些事儿</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Sat, 19 Sep 2026 21:54:25 +0800</lastBuildDate><atom:link href="https://before80.github.io/prgms/Swift/basic/Part-3-Types-and-Abstraction/index.xml" rel="self" type="application/rss+xml"/><item><title>第16章 枚举：关联值、原始值与可选值的真身</title><link>https://before80.github.io/prgms/Swift/basic/Part-3-Types-and-Abstraction/Chapter-16-Enumerations/</link><pubDate>Mon, 14 Sep 2026 22:30:00 +0800</pubDate><guid>https://before80.github.io/prgms/Swift/basic/Part-3-Types-and-Abstraction/Chapter-16-Enumerations/</guid><description>&lt;h1 id="第十六章枚举关联值原始值与可选值的真身"&gt;第十六章：枚举：关联值、原始值与可选值的真身&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;枚举经常被误解成“给整数起名字”。在 Swift 里，它的野心大得多：可以携带不同形状的数据，可以有方法、计算属性，甚至能递归表达一棵树。你从第 9 章开始使用的 &lt;code&gt;Int?&lt;/code&gt;，其实就是枚举。&lt;/p&gt;</description></item><item><title>第17章 结构体与值语义：复制之后互不打扰</title><link>https://before80.github.io/prgms/Swift/basic/Part-3-Types-and-Abstraction/Chapter-17-Structures-and-Value-Semantics/</link><pubDate>Mon, 14 Sep 2026 22:30:00 +0800</pubDate><guid>https://before80.github.io/prgms/Swift/basic/Part-3-Types-and-Abstraction/Chapter-17-Structures-and-Value-Semantics/</guid><description>&lt;h1 id="第十七章结构体与值语义复制之后互不打扰"&gt;第十七章：结构体与值语义：复制之后互不打扰&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;结构体是 Swift 写业务模型时最常拿起的工具。原因不是它“比类快”这种口号，而是它默认带来清晰的复制语义：把值交给别人之后，对方改自己的副本，不会顺手改坏你手里的那份。&lt;/p&gt;</description></item><item><title>第18章 类与继承：共享身份与运行时多态</title><link>https://before80.github.io/prgms/Swift/basic/Part-3-Types-and-Abstraction/Chapter-18-Classes-and-Inheritance/</link><pubDate>Mon, 14 Sep 2026 22:30:00 +0800</pubDate><guid>https://before80.github.io/prgms/Swift/basic/Part-3-Types-and-Abstraction/Chapter-18-Classes-and-Inheritance/</guid><description>&lt;h1 id="第十八章类与继承共享身份与运行时多态"&gt;第十八章：类与继承：共享身份与运行时多态&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;结构体说：“我给你一份副本。”类说：“我们指向同一个东西。”这句话决定了类的强大和麻烦。它适合表达有身份、需要共享和继承的对象；同样也意味着你必须认真面对引用、生命周期和循环引用。&lt;/p&gt;</description></item><item><title>第19章 属性、方法与下标：把接口设计得顺手</title><link>https://before80.github.io/prgms/Swift/basic/Part-3-Types-and-Abstraction/Chapter-19-Properties-Methods-and-Subscripts/</link><pubDate>Mon, 14 Sep 2026 22:30:00 +0800</pubDate><guid>https://before80.github.io/prgms/Swift/basic/Part-3-Types-and-Abstraction/Chapter-19-Properties-Methods-and-Subscripts/</guid><description>&lt;h1 id="第十九章属性方法与下标把接口设计得顺手"&gt;第十九章：属性、方法与下标：把接口设计得顺手&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;属性不只是“变量放在类型里”。它可以是算出来的、可以观察变化、可以延迟生成，甚至可以被属性包装器重新定义读写方式。方法和下标则决定使用者如何与你定义的类型互动。接口设计得好，调用处读起来像一句顺滑的话。&lt;/p&gt;</description></item><item><title>第20章 初始化与反初始化：让对象安全地诞生和离开</title><link>https://before80.github.io/prgms/Swift/basic/Part-3-Types-and-Abstraction/Chapter-20-Initialization-and-Deinitialization/</link><pubDate>Mon, 14 Sep 2026 22:30:00 +0800</pubDate><guid>https://before80.github.io/prgms/Swift/basic/Part-3-Types-and-Abstraction/Chapter-20-Initialization-and-Deinitialization/</guid><description>&lt;h1 id="第二十章初始化与反初始化让对象安全地诞生和离开"&gt;第二十章：初始化与反初始化：让对象安全地诞生和离开&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;创建对象不是“把内存填满”这么粗暴。Swift 要求实例在初始化结束时每个存储属性都合法，父类在子类准备好之前不能被随便用，失败时可以明确返回 &lt;code&gt;nil&lt;/code&gt;。理解这些规则，才能写出不会在诞生半途炸掉的对象。&lt;/p&gt;</description></item><item><title>第21章 扩展与嵌套类型：在原有类型上继续生长</title><link>https://before80.github.io/prgms/Swift/basic/Part-3-Types-and-Abstraction/Chapter-21-Extensions-and-Nested-Types/</link><pubDate>Mon, 14 Sep 2026 22:30:00 +0800</pubDate><guid>https://before80.github.io/prgms/Swift/basic/Part-3-Types-and-Abstraction/Chapter-21-Extensions-and-Nested-Types/</guid><description>&lt;h1 id="第二十一章扩展与嵌套类型在原有类型上继续生长"&gt;第二十一章：扩展与嵌套类型：在原有类型上继续生长&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;扩展让你给已有类型添加新能力，却不必改动原声明；哪怕类型的源码不在你手里也能做到。它的力量来自“保持类型身份不变”：扩展后的 &lt;code&gt;String&lt;/code&gt; 仍然是 &lt;code&gt;String&lt;/code&gt;，不是某个包装类。用得好，代码分层清晰；用过头，则会把职责撒得到处都是。&lt;/p&gt;</description></item><item><title>第22章 协议：描述能力，打通类型边界</title><link>https://before80.github.io/prgms/Swift/basic/Part-3-Types-and-Abstraction/Chapter-22-Protocols/</link><pubDate>Mon, 14 Sep 2026 22:30:00 +0800</pubDate><guid>https://before80.github.io/prgms/Swift/basic/Part-3-Types-and-Abstraction/Chapter-22-Protocols/</guid><description>&lt;h1 id="第二十二章协议描述能力打通类型边界"&gt;第二十二章：协议：描述能力，打通类型边界&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;协议不是在问“你是什么类型”，而是在问“你能做什么”。它让结构体、枚举和类站在同一张能力清单前，各自给出实现。写好协议，代码之间就能依赖抽象而不是依赖具体实现。&lt;/p&gt;</description></item><item><title>第23章 泛型：写一次，适配很多类型</title><link>https://before80.github.io/prgms/Swift/basic/Part-3-Types-and-Abstraction/Chapter-23-Generics/</link><pubDate>Mon, 14 Sep 2026 22:30:00 +0800</pubDate><guid>https://before80.github.io/prgms/Swift/basic/Part-3-Types-and-Abstraction/Chapter-23-Generics/</guid><description>&lt;h1 id="第二十三章泛型写一次适配很多类型"&gt;第二十三章：泛型：写一次，适配很多类型&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;泛型的价值不是少写几行，而是让代码表达“对任意满足条件的类型都成立”。它把重复逻辑提升成通用工具，还能在编译期保留类型信息。代价是抽象层级提高，约束写得太宽或太窄都会让 API 变难用。&lt;/p&gt;</description></item><item><title>第24章 类型系统补全：Any、Self、KeyPath 与类型擦除</title><link>https://before80.github.io/prgms/Swift/basic/Part-3-Types-and-Abstraction/Chapter-24-Type-System-Toolbox/</link><pubDate>Mon, 14 Sep 2026 22:30:00 +0800</pubDate><guid>https://before80.github.io/prgms/Swift/basic/Part-3-Types-and-Abstraction/Chapter-24-Type-System-Toolbox/</guid><description>&lt;h1 id="第二十四章类型系统补全anyselfkeypath-与类型擦除"&gt;第二十四章：类型系统补全：&lt;code&gt;Any&lt;/code&gt;、&lt;code&gt;Self&lt;/code&gt;、&lt;code&gt;KeyPath&lt;/code&gt; 与类型擦除&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;前面的协议和泛型已经足够搭出大多数抽象。但 Swift 的类型工具箱里还有一些“小而关键”的工具：&lt;code&gt;Any&lt;/code&gt;、元类型、&lt;code&gt;Self&lt;/code&gt;、键路径、可调用类型和类型擦除。它们不是每天都用，却经常出现在框架和库的底层。&lt;/p&gt;</description></item><item><title>第25章 访问控制、模块与条件编译</title><link>https://before80.github.io/prgms/Swift/basic/Part-3-Types-and-Abstraction/Chapter-25-Access-Control-Modules-and-Conditional-Compilation/</link><pubDate>Mon, 14 Sep 2026 22:30:00 +0800</pubDate><guid>https://before80.github.io/prgms/Swift/basic/Part-3-Types-and-Abstraction/Chapter-25-Access-Control-Modules-and-Conditional-Compilation/</guid><description>&lt;h1 id="第二十五章访问控制模块与条件编译"&gt;第二十五章：访问控制、模块与条件编译&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;代码长大了，边界就比功能更重要。访问控制决定“谁能看见什么”，模块决定“哪些类型属于同一个发布单元”，条件编译决定“哪些代码在哪些平台参与构建”。这些规则没有花哨效果，却直接影响 API 是否稳定、二进制是否兼容。&lt;/p&gt;</description></item><item><title>第26章 宏：让编译器替你写代码</title><link>https://before80.github.io/prgms/Swift/basic/Part-3-Types-and-Abstraction/Chapter-26-Macros/</link><pubDate>Mon, 14 Sep 2026 22:30:00 +0800</pubDate><guid>https://before80.github.io/prgms/Swift/basic/Part-3-Types-and-Abstraction/Chapter-26-Macros/</guid><description>&lt;h1 id="第二十六章宏让编译器替你写代码"&gt;第二十六章：宏：让编译器替你写代码&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;宏听起来像“高级魔法”，实际更像一台编译期代码生成器：你写一段简洁的调用，编译器在编译时展开成更多代码。它没有运行时开销，也没有偷偷修改对象；展开后的代码仍然要接受完整类型检查。&lt;/p&gt;</description></item></channel></rss>