<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Swift 语言速查表 on 编程那些事儿</title><link>https://before80.github.io/prgms/Swift/CheatSheet/</link><description>Recent content in Swift 语言速查表 on 编程那些事儿</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Sun, 20 Sep 2026 18:22:26 +0800</lastBuildDate><atom:link href="https://before80.github.io/prgms/Swift/CheatSheet/index.xml" rel="self" type="application/rss+xml"/><item><title>01 起步与运行方式</title><link>https://before80.github.io/prgms/Swift/CheatSheet/01-Quickstart/</link><pubDate>Wed, 16 Sep 2026 11:00:00 +0800</pubDate><guid>https://before80.github.io/prgms/Swift/CheatSheet/01-Quickstart/</guid><description>&lt;h1 id="01-起步与运行方式"&gt;01 起步与运行方式&lt;/h1&gt;
&lt;h2 id="一段代码的五种跑法"&gt;一段代码的五种跑法&lt;/h2&gt;
&lt;p&gt;Swift 不像脚本语言只有一种执行方式，也不像编译型语言动不动就要建工程。同一个 &lt;code&gt;print&lt;/code&gt;，下面五种跑法都成立，选哪种取决于你此刻想干什么。&lt;/p&gt;</description></item><item><title>02 语言主干</title><link>https://before80.github.io/prgms/Swift/CheatSheet/02-Language-Basics/</link><pubDate>Wed, 16 Sep 2026 11:00:00 +0800</pubDate><guid>https://before80.github.io/prgms/Swift/CheatSheet/02-Language-Basics/</guid><description>&lt;h1 id="02-语言主干"&gt;02 语言主干&lt;/h1&gt;
&lt;h2 id="常量与变量"&gt;常量与变量&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-swift" data-lang="swift"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;let&lt;/span&gt; &lt;span style="color:#dcaeea"&gt;pi&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&lt;/span&gt; &lt;span style="color:#d19a66"&gt;3.14159&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 常量，赋值一次就锁死&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;var&lt;/span&gt; &lt;span style="color:#dcaeea"&gt;count&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&lt;/span&gt; &lt;span style="color:#d19a66"&gt;0&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 变量，可以再改&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;count&lt;/span&gt; &lt;span style="color:#54b1c7"&gt;+=&lt;/span&gt; &lt;span style="color:#d19a66"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;let&lt;/span&gt; &lt;span style="color:#dcaeea"&gt;explicit&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;Double&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&lt;/span&gt; &lt;span style="color:#d19a66"&gt;1&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 显式类型注解&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;let&lt;/span&gt; &lt;span style="color:#dcaeea"&gt;a&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&lt;/span&gt; &lt;span style="color:#d19a66"&gt;1&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;b&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&lt;/span&gt; &lt;span style="color:#d19a66"&gt;2&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;c&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&lt;/span&gt; &lt;span style="color:#d19a66"&gt;3&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 一行声明多个&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;var&lt;/span&gt; &lt;span style="color:#dcaeea"&gt;x&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&lt;/span&gt; &lt;span style="color:#d19a66"&gt;0&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;y&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&lt;/span&gt; &lt;span style="color:#d19a66"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;🔥 &lt;strong&gt;默认写 &lt;code&gt;let&lt;/code&gt;，编译器报&amp;quot;变量从未被修改&amp;quot;时再改成 &lt;code&gt;var&lt;/code&gt;。&lt;/strong&gt; 编译器给出的这条警告是在帮你，不是在烦你。&lt;/p&gt;</description></item><item><title>03 类型与字符串</title><link>https://before80.github.io/prgms/Swift/CheatSheet/03-Types-and-Strings/</link><pubDate>Wed, 16 Sep 2026 11:00:00 +0800</pubDate><guid>https://before80.github.io/prgms/Swift/CheatSheet/03-Types-and-Strings/</guid><description>&lt;h1 id="03-类型与字符串"&gt;03 类型与字符串&lt;/h1&gt;
&lt;h2 id="数值类型全景"&gt;数值类型全景&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;类型&lt;/th&gt;
 &lt;th&gt;位数&lt;/th&gt;
 &lt;th&gt;范围 / 精度&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Int&lt;/code&gt; / &lt;code&gt;UInt&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;平台字长（64 位平台上 64 位）&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Int&lt;/code&gt; 是默认整数类型，能用就用它&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Int8&lt;/code&gt; &lt;code&gt;Int16&lt;/code&gt; &lt;code&gt;Int32&lt;/code&gt; &lt;code&gt;Int64&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;8 / 16 / 32 / 64&lt;/td&gt;
 &lt;td&gt;有符号，与 C 的 &lt;code&gt;int8_t&lt;/code&gt; 等一一对应&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;UInt8&lt;/code&gt; &lt;code&gt;UInt16&lt;/code&gt; &lt;code&gt;UInt32&lt;/code&gt; &lt;code&gt;UInt64&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;同上&lt;/td&gt;
 &lt;td&gt;无符号，处理二进制协议时用&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Float16&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;16&lt;/td&gt;
 &lt;td&gt;精度约 3 位十进制；只有 Apple 芯片（arm64）可用，Intel Mac 上是 unavailable 🆕&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Float&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;32&lt;/td&gt;
 &lt;td&gt;精度约 6 位十进制&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Double&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;64&lt;/td&gt;
 &lt;td&gt;精度约 15 位十进制，&lt;strong&gt;浮点默认类型&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-swift" data-lang="swift"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;print&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;Int8&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;max&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;Int8&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;min&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;UInt8&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;max&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// prints: 127 -128 255&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;print&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;Int&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;max&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// prints: 9223372036854775807&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;⚠️ &lt;code&gt;UInt&lt;/code&gt; 并不是&amp;quot;更安全的 &lt;code&gt;Int&lt;/code&gt;&amp;quot;。它只是不给你负数：&lt;code&gt;UInt(0) - 1&lt;/code&gt; 不会变成 &lt;code&gt;-1&lt;/code&gt;，而是当场崩溃。真要用环绕写法，&lt;code&gt;&amp;amp;-&lt;/code&gt; 会送你一个看起来非常体面的巨大正数，bug 就从这里开始：&lt;/p&gt;</description></item><item><title>04 集合与序列</title><link>https://before80.github.io/prgms/Swift/CheatSheet/04-Collections/</link><pubDate>Wed, 16 Sep 2026 11:00:00 +0800</pubDate><guid>https://before80.github.io/prgms/Swift/CheatSheet/04-Collections/</guid><description>&lt;h1 id="04-集合与序列"&gt;04 集合与序列&lt;/h1&gt;
&lt;h2 id="三种集合先看怎么选"&gt;三种集合，先看怎么选&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;th&gt;&lt;code&gt;Array&lt;/code&gt;&lt;/th&gt;
 &lt;th&gt;&lt;code&gt;Dictionary&lt;/code&gt;&lt;/th&gt;
 &lt;th&gt;&lt;code&gt;Set&lt;/code&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;顺序&lt;/td&gt;
 &lt;td&gt;保持插入顺序&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;不保证&lt;/strong&gt;任何顺序&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;不保证&lt;/strong&gt;任何顺序&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;查找&lt;/td&gt;
 &lt;td&gt;按索引 O(1)，按值 O(n)&lt;/td&gt;
 &lt;td&gt;按键 O(1)&lt;/td&gt;
 &lt;td&gt;按值 O(1)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;元素要求&lt;/td&gt;
 &lt;td&gt;无&lt;/td&gt;
 &lt;td&gt;键必须 &lt;code&gt;Hashable&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;元素必须 &lt;code&gt;Hashable&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;典型场景&lt;/td&gt;
 &lt;td&gt;有序列表、频繁按下标访问&lt;/td&gt;
 &lt;td&gt;键值映射、查表&lt;/td&gt;
 &lt;td&gt;去重、成员判断、集合运算&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;字面量&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;[1, 2, 3]&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;[&amp;quot;a&amp;quot;: 1]&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Set([1, 2])&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;💭 拿不定主意时先写 &lt;code&gt;Array&lt;/code&gt;。等出现&amp;quot;我要判重&amp;quot;或&amp;quot;按 key 查&amp;quot;的需求，再换成 &lt;code&gt;Set&lt;/code&gt; 或 &lt;code&gt;Dictionary&lt;/code&gt;——它们都是值类型，换起来不伤筋动骨。&lt;/p&gt;</description></item><item><title>05 函数与闭包</title><link>https://before80.github.io/prgms/Swift/CheatSheet/05-Functions-and-Closures/</link><pubDate>Wed, 16 Sep 2026 11:00:00 +0800</pubDate><guid>https://before80.github.io/prgms/Swift/CheatSheet/05-Functions-and-Closures/</guid><description>&lt;h1 id="05-函数与闭包"&gt;05 函数与闭包&lt;/h1&gt;
&lt;h2 id="函数声明的解剖"&gt;函数声明的解剖&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-swift" data-lang="swift"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;func&lt;/span&gt; &lt;span style="color:#00b1f7"&gt;greet&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;_&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;name&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;String&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;from&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;city&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;String&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#34;北京&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;times&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;Int&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&lt;/span&gt; &lt;span style="color:#d19a66"&gt;1&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;String&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e5c07b"&gt;Array&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;repeating&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#34;你好，&lt;/span&gt;&lt;span style="color:#98c379"&gt;\(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;name&lt;/span&gt;&lt;span style="color:#98c379"&gt;)&lt;/span&gt;&lt;span style="color:#98c379"&gt;（来自 &lt;/span&gt;&lt;span style="color:#98c379"&gt;\(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;city&lt;/span&gt;&lt;span style="color:#98c379"&gt;)&lt;/span&gt;&lt;span style="color:#98c379"&gt;）&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;count&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;times&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;).&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;joined&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;separator&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#d26464;font-weight:bold"&gt;\n&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;print&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;greet&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;Swift&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// prints: 你好，Swift（来自 北京）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;print&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;greet&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;Kotlin&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;from&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#34;上海&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;times&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#d19a66"&gt;2&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// prints: 你好，Kotlin（来自 上海）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// 你好，Kotlin（来自 上海）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;读法要按这个顺序：&lt;/p&gt;</description></item><item><title>06 可选值</title><link>https://before80.github.io/prgms/Swift/CheatSheet/06-Optionals/</link><pubDate>Wed, 16 Sep 2026 11:00:00 +0800</pubDate><guid>https://before80.github.io/prgms/Swift/CheatSheet/06-Optionals/</guid><description>&lt;h1 id="06-可选值"&gt;06 可选值&lt;/h1&gt;
&lt;h2 id="它到底是什么"&gt;它到底是什么&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Optional&lt;/code&gt; 不是什么特殊关键字，它就是一个普通的枚举：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-swift" data-lang="swift"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;enum&lt;/span&gt; &lt;span style="color:#ca72ff"&gt;Optional&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;Wrapped&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;case&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;none&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 也就是 nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;case&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;some&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;Wrapped&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;// 有值&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;于是三件事一次性成立：&lt;code&gt;Int?&lt;/code&gt; 就是 &lt;code&gt;Optional&amp;lt;Int&amp;gt;&lt;/code&gt;；&lt;code&gt;nil&lt;/code&gt; 就是 &lt;code&gt;.none&lt;/code&gt;；所有能作用在枚举上的手段（模式匹配、&lt;code&gt;switch&lt;/code&gt;、&lt;code&gt;map&lt;/code&gt;）都能用在可选值上。&lt;/p&gt;</description></item><item><title>07 自定义类型</title><link>https://before80.github.io/prgms/Swift/CheatSheet/07-Custom-Types/</link><pubDate>Wed, 16 Sep 2026 11:00:00 +0800</pubDate><guid>https://before80.github.io/prgms/Swift/CheatSheet/07-Custom-Types/</guid><description>&lt;h1 id="07-自定义类型"&gt;07 自定义类型&lt;/h1&gt;
&lt;h2 id="四种类型先看怎么选"&gt;四种类型，先看怎么选&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;th&gt;&lt;code&gt;struct&lt;/code&gt;&lt;/th&gt;
 &lt;th&gt;&lt;code&gt;class&lt;/code&gt;&lt;/th&gt;
 &lt;th&gt;&lt;code&gt;enum&lt;/code&gt;&lt;/th&gt;
 &lt;th&gt;&lt;code&gt;actor&lt;/code&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;语义&lt;/td&gt;
 &lt;td&gt;值&lt;/td&gt;
 &lt;td&gt;引用&lt;/td&gt;
 &lt;td&gt;值&lt;/td&gt;
 &lt;td&gt;引用&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;继承&lt;/td&gt;
 &lt;td&gt;❌&lt;/td&gt;
 &lt;td&gt;✅&lt;/td&gt;
 &lt;td&gt;❌&lt;/td&gt;
 &lt;td&gt;❌&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;能表示&amp;quot;多选一&amp;quot;&lt;/td&gt;
 &lt;td&gt;❌&lt;/td&gt;
 &lt;td&gt;❌&lt;/td&gt;
 &lt;td&gt;✅&lt;/td&gt;
 &lt;td&gt;❌&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;并发安全&lt;/td&gt;
 &lt;td&gt;天然（值不共享）&lt;/td&gt;
 &lt;td&gt;需要自己保证&lt;/td&gt;
 &lt;td&gt;天然&lt;/td&gt;
 &lt;td&gt;由 actor 隔离保证&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;定义 &lt;code&gt;deinit&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;❌&lt;/td&gt;
 &lt;td&gt;✅&lt;/td&gt;
 &lt;td&gt;❌&lt;/td&gt;
 &lt;td&gt;✅&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;默认选择&lt;/td&gt;
 &lt;td&gt;🔥 首选&lt;/td&gt;
 &lt;td&gt;需要共享状态时才用&lt;/td&gt;
 &lt;td&gt;需要穷尽分支时用&lt;/td&gt;
 &lt;td&gt;需要可变共享状态时&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;💭 这是 Swift 里最重要的一张表。默认写 &lt;code&gt;struct&lt;/code&gt;；需要继承或身份标识（两个对象是不是同一个）时才换 &lt;code&gt;class&lt;/code&gt;；需要&amp;quot;这些情况互斥&amp;quot;时用 &lt;code&gt;enum&lt;/code&gt;；需要并发下安全地共享可变状态时用 &lt;code&gt;actor&lt;/code&gt;。&lt;/p&gt;</description></item><item><title>08 协议与泛型</title><link>https://before80.github.io/prgms/Swift/CheatSheet/08-Protocols-and-Generics/</link><pubDate>Wed, 16 Sep 2026 11:00:00 +0800</pubDate><guid>https://before80.github.io/prgms/Swift/CheatSheet/08-Protocols-and-Generics/</guid><description>&lt;h1 id="08-协议与泛型"&gt;08 协议与泛型&lt;/h1&gt;
&lt;h2 id="协议一份能力清单"&gt;协议：一份能力清单&lt;/h2&gt;
&lt;p&gt;协议只描述&amp;quot;能做什么&amp;quot;，不描述&amp;quot;是什么&amp;quot;。任何类型——结构体、类、枚举、actor——都能遵守协议。&lt;/p&gt;</description></item><item><title>09 错误处理与并发</title><link>https://before80.github.io/prgms/Swift/CheatSheet/09-Error-Handling-and-Concurrency/</link><pubDate>Wed, 16 Sep 2026 11:00:00 +0800</pubDate><guid>https://before80.github.io/prgms/Swift/CheatSheet/09-Error-Handling-and-Concurrency/</guid><description>&lt;h1 id="09-错误处理与并发"&gt;09 错误处理与并发&lt;/h1&gt;
&lt;h2 id="错误处理"&gt;错误处理&lt;/h2&gt;
&lt;p&gt;Swift 用 &lt;code&gt;throws&lt;/code&gt; 表示&amp;quot;这个函数可能失败&amp;quot;，用 &lt;code&gt;try&lt;/code&gt; 表示&amp;quot;我知道它可能失败&amp;quot;。这比异常好查，比返回码好读。&lt;/p&gt;</description></item><item><title>10 内存与值语义</title><link>https://before80.github.io/prgms/Swift/CheatSheet/10-Memory-and-Value-Semantics/</link><pubDate>Wed, 16 Sep 2026 11:00:00 +0800</pubDate><guid>https://before80.github.io/prgms/Swift/CheatSheet/10-Memory-and-Value-Semantics/</guid><description>&lt;h1 id="10-内存与值语义"&gt;10 内存与值语义&lt;/h1&gt;
&lt;h2 id="赋值的时候到底发生了什么"&gt;赋值的时候到底发生了什么&lt;/h2&gt;
&lt;p&gt;这个问题决定了 Swift 里 90% 的意外行为。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;th&gt;值类型（&lt;code&gt;struct&lt;/code&gt; &lt;code&gt;enum&lt;/code&gt; 集合 基本类型）&lt;/th&gt;
 &lt;th&gt;引用类型（&lt;code&gt;class&lt;/code&gt; &lt;code&gt;actor&lt;/code&gt; 闭包）&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;赋值&lt;/td&gt;
 &lt;td&gt;逻辑上复制一份&lt;/td&gt;
 &lt;td&gt;复制一个指针&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;传参&lt;/td&gt;
 &lt;td&gt;逻辑上复制一份&lt;/td&gt;
 &lt;td&gt;传指针&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;放进数组&lt;/td&gt;
 &lt;td&gt;逻辑上复制一份&lt;/td&gt;
 &lt;td&gt;传指针&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;改一个会影响另一个吗&lt;/td&gt;
 &lt;td&gt;❌&lt;/td&gt;
 &lt;td&gt;✅&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;内存布局&lt;/td&gt;
 &lt;td&gt;通常内联在容器里&lt;/td&gt;
 &lt;td&gt;堆上一个独立对象&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;








&lt;ul class="nav nav-tabs" id="tabs-0" role="tablist"&gt;
 &lt;li class="nav-item"&gt;
 &lt;button class="nav-link active"
 id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
 aria-controls="tabs-00-00" aria-selected="true"&gt;
 值类型
 &lt;/button&gt;
 &lt;/li&gt;&lt;li class="nav-item"&gt;
 &lt;button class="nav-link"
 id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
 aria-controls="tabs-00-01" aria-selected="false"&gt;
 引用类型
 &lt;/button&gt;
 &lt;/li&gt;&lt;li class="nav-item"&gt;
 &lt;button class="nav-link"
 id="tabs-00-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-02" role="tab"
 aria-controls="tabs-00-02" aria-selected="false"&gt;
 集合里的元素
 &lt;/button&gt;
 &lt;/li&gt;
&lt;/ul&gt;

&lt;div class="tab-content" id="tabs-0-content"&gt;
 &lt;div class="tab-body tab-pane fade show active"
 id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0"&gt;
 &lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-swift" data-lang="swift"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;struct&lt;/span&gt; &lt;span style="color:#ca72ff"&gt;Score&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;var&lt;/span&gt; &lt;span style="color:#dcaeea"&gt;value&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;Int&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;var&lt;/span&gt; &lt;span style="color:#dcaeea"&gt;a&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;Score&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;value&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#d19a66"&gt;1&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;var&lt;/span&gt; &lt;span style="color:#dcaeea"&gt;b&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;a&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#aa89ea"&gt;b&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;value&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&lt;/span&gt; &lt;span style="color:#d19a66"&gt;99&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e5c07b"&gt;print&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;a&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;value&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;b&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;value&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// prints: 1 99&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;两个变量各有一份数据。函数参数同理：&lt;/p&gt;</description></item><item><title>11 标准库速查</title><link>https://before80.github.io/prgms/Swift/CheatSheet/11-Standard-Library/</link><pubDate>Wed, 16 Sep 2026 11:00:00 +0800</pubDate><guid>https://before80.github.io/prgms/Swift/CheatSheet/11-Standard-Library/</guid><description>&lt;h1 id="11-标准库速查"&gt;11 标准库速查&lt;/h1&gt;
&lt;h2 id="协议全景"&gt;协议全景&lt;/h2&gt;
&lt;p&gt;标准库的力量主要来自协议。看到某个类型能做什么，基本就是看它遵守了哪些协议。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;协议&lt;/th&gt;
 &lt;th&gt;一句话&lt;/th&gt;
 &lt;th&gt;遵守后得到&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Equatable&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;能比较相等&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;==&lt;/code&gt; &lt;code&gt;!=&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Hashable&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;能放进集合&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Set&lt;/code&gt; &lt;code&gt;Dictionary&lt;/code&gt; 的键、&lt;code&gt;hash(into:)&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Comparable&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;能排序&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;&lt;/code&gt; &lt;code&gt;&amp;lt;=&lt;/code&gt; &lt;code&gt;&amp;gt;&lt;/code&gt; &lt;code&gt;&amp;gt;=&lt;/code&gt;、&lt;code&gt;sorted()&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Identifiable&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;有稳定身份&lt;/td&gt;
 &lt;td&gt;SwiftUI 列表用得上&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Codable&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;能编解码&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;JSONEncoder&lt;/code&gt; / &lt;code&gt;JSONDecoder&lt;/code&gt; 🔥&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Sequence&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;能遍历&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;for-in&lt;/code&gt;、&lt;code&gt;map&lt;/code&gt; &lt;code&gt;filter&lt;/code&gt; &lt;code&gt;reduce&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Collection&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;能下标访问&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;count&lt;/code&gt;、&lt;code&gt;indices&lt;/code&gt;、可重复遍历&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;BidirectionalCollection&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;能反向走&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;reversed()&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;RandomAccessCollection&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;下标 O(1)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Array&lt;/code&gt;、随机访问算法&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;CustomStringConvertible&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;能自定义打印&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;LosslessStringConvertible&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;能从字符串无损还原&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;init?(_:)&lt;/code&gt; 与 &lt;code&gt;description&lt;/code&gt; 一对&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;CaseIterable&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;枚举能列全&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;allCases&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;RawRepresentable&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;有原始值&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;init?(rawValue:)&lt;/code&gt;、&lt;code&gt;rawValue&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ExpressibleBy*Literal&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;能用字面量写&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;let x: MyType = 1&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Sendable&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;能跨并发域传&lt;/td&gt;
 &lt;td&gt;见 &lt;a href="https://before80.github.io/prgms/Swift/CheatSheet/09-Error-Handling-and-Concurrency/"&gt;09 错误处理与并发&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;AsyncSequence&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;能 &lt;code&gt;for await&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;异步数据流&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;IteratorProtocol&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;能一步步取值&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;next()&lt;/code&gt;，&lt;code&gt;Sequence&lt;/code&gt; 的底层&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;AdditiveArithmetic&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;只能加、只能减&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;+&lt;/code&gt; &lt;code&gt;-&lt;/code&gt;（向量、时长这类类型的最小数学要求）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Numeric&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;加上乘法&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;*&lt;/code&gt;、&lt;code&gt;isMultiple(of:)&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;SignedNumeric&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;再带上正负&lt;/td&gt;
 &lt;td&gt;一元 &lt;code&gt;-&lt;/code&gt;、&lt;code&gt;negate()&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;BinaryInteger&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;整数家族&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/%&lt;/code&gt;、位运算、&lt;code&gt;String(x, radix:)&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;FixedWidthInteger&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;定长整数&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;amp;+&lt;/code&gt;、&lt;code&gt;bitWidth&lt;/code&gt;、&lt;code&gt;byteSwapped&lt;/code&gt;、溢出报告&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;FloatingPoint&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;浮点家族&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;isNaN&lt;/code&gt;、&lt;code&gt;rounded()&lt;/code&gt;、&lt;code&gt;nextUp&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Strideable&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;能按步长走&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;stride(from:to:by:)&lt;/code&gt;、&lt;code&gt;advanced(by:)&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;OptionSet&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;位掩码选项集合&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;contains&lt;/code&gt;、&lt;code&gt;union&lt;/code&gt;、&lt;code&gt;[.a, .b]&lt;/code&gt; 写法&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Error&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;能当错误抛&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;throw&lt;/code&gt; / &lt;code&gt;catch&lt;/code&gt;，见 &lt;a href="https://before80.github.io/prgms/Swift/CheatSheet/09-Error-Handling-and-Concurrency/"&gt;09 章&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;CustomDebugStringConvertible&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;自定义 &lt;code&gt;debugPrint&lt;/code&gt; 输出&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;debugDescription&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;🔥 大多数协议的实现编译器能自动合成，前提是所有存储属性也满足条件。&lt;code&gt;Equatable&lt;/code&gt;、&lt;code&gt;Hashable&lt;/code&gt;、&lt;code&gt;Codable&lt;/code&gt;、&lt;code&gt;CaseIterable&lt;/code&gt; 都属于这一类，手写只是在有特殊需求时才需要。&lt;/p&gt;</description></item><item><title>12 语法糖与简写对照</title><link>https://before80.github.io/prgms/Swift/CheatSheet/12-Syntax-Sugar/</link><pubDate>Wed, 16 Sep 2026 11:00:00 +0800</pubDate><guid>https://before80.github.io/prgms/Swift/CheatSheet/12-Syntax-Sugar/</guid><description>&lt;h1 id="12-语法糖与简写对照"&gt;12 语法糖与简写对照&lt;/h1&gt;
&lt;p&gt;Swift 的简写规则很多，而且&lt;strong&gt;大都只能省、不能加&lt;/strong&gt;——你要读懂别人写的简写，也要知道自己的简写能被还原成什么。这一页全部用&amp;quot;完整写法 / 简写&amp;quot;并排的方式呈现。&lt;/p&gt;</description></item><item><title>13 工具链与工程</title><link>https://before80.github.io/prgms/Swift/CheatSheet/13-Tooling/</link><pubDate>Wed, 16 Sep 2026 11:00:00 +0800</pubDate><guid>https://before80.github.io/prgms/Swift/CheatSheet/13-Tooling/</guid><description>&lt;h1 id="13-工具链与工程"&gt;13 工具链与工程&lt;/h1&gt;
&lt;h2 id="命令行速查"&gt;命令行速查&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;命令&lt;/th&gt;
 &lt;th&gt;作用&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;swift --version&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;看工具链版本&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;swift file.swift&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;直接解释执行一个文件&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;swift -e 'print(1)'&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;执行一行代码&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;swift repl&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;交互式环境 🔥&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;swiftc file.swift -o app&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;编译成可执行文件&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;swiftc -typecheck file.swift&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;只做类型检查，最快 ✨&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;swiftc -O file.swift -o app&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;优化构建&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;swift build&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;构建 SwiftPM 包&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;swift build -c release&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;发布配置构建&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;swift run&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;构建并运行可执行产品&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;swift test&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;跑测试&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;swift test --filter Name&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;只跑匹配的测试&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;swift package init --type executable&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;新建可执行包&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;swift package resolve&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;解析依赖并写入 &lt;code&gt;Package.resolved&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;swift package update&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;把依赖更新到允许的最新版&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;swift package describe&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;打印包的目录与目标结构&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;swift package dump-package&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;以 JSON 打印解析后的清单，排查配置问题很好用&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;swift package show-dependencies&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;打印依赖树，看清每个依赖是从哪来的&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;swift package dump-symbol-graph&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;导出模块的 API 符号图，文档工具用得上 🝖&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;swift package add-dependency &amp;lt;url&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;直接用命令改清单加依赖，不用手写 &lt;code&gt;.package(...)&lt;/code&gt; 🆕&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;swift package add-target &amp;lt;名字&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;加一个目标（还有 &lt;code&gt;add-product&lt;/code&gt;、&lt;code&gt;add-setting&lt;/code&gt;）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;swift package tools-version --set 6.2&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;改清单里的 &lt;code&gt;swift-tools-version&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;swift package archive-source&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;打包源码 zip，发布或存档用&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;swift package compute-checksum &amp;lt;文件&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;算二进制依赖的校验和&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;swift package clean&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;清掉构建产物&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;swift package reset&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;连缓存一起清，构建&amp;quot;玄学问题&amp;quot;的最后一招&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;swift demangle&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;把 &lt;code&gt;$s4main3fooyyF&lt;/code&gt; 这类符号名还原成 &lt;code&gt;main.foo() -&amp;gt; ()&lt;/code&gt;，读崩溃日志用 🔥&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;swift format&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;官方格式化/风格检查工具，已随工具链提供，见下&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="透传编译参数"&gt;透传编译参数&lt;/h3&gt;
&lt;p&gt;SwiftPM 自己不认识的参数，用 &lt;code&gt;-X&lt;/code&gt; 前缀透传给下一层：&lt;/p&gt;</description></item><item><title>14 类型转换与互操作</title><link>https://before80.github.io/prgms/Swift/CheatSheet/14-Type-Casting-and-Interop/</link><pubDate>Wed, 16 Sep 2026 11:00:00 +0800</pubDate><guid>https://before80.github.io/prgms/Swift/CheatSheet/14-Type-Casting-and-Interop/</guid><description>&lt;h1 id="14-类型转换与互操作"&gt;14 类型转换与互操作&lt;/h1&gt;
&lt;h2 id="四种写法先分清谁是谁"&gt;四种写法，先分清谁是谁&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;写法&lt;/th&gt;
 &lt;th&gt;名字&lt;/th&gt;
 &lt;th&gt;干什么&lt;/th&gt;
 &lt;th&gt;失败时&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;x is T&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;类型检查&lt;/td&gt;
 &lt;td&gt;问一句&amp;quot;它是不是 &lt;code&gt;T&lt;/code&gt;&amp;quot;&lt;/td&gt;
 &lt;td&gt;不会失败，给个 &lt;code&gt;Bool&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;x as? T&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;条件转换&lt;/td&gt;
 &lt;td&gt;是就转，不是就算了&lt;/td&gt;
 &lt;td&gt;给 &lt;code&gt;T?&lt;/code&gt;，没转成就是 &lt;code&gt;nil&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;x as! T&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;强制转换&lt;/td&gt;
 &lt;td&gt;我确定它是&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;崩&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;x as T&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;向上转型 / 桥接 / 字面量标注&lt;/td&gt;
 &lt;td&gt;编译期就成立的事&lt;/td&gt;
 &lt;td&gt;编译期直接报错&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;16
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-swift" data-lang="swift"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;let&lt;/span&gt; &lt;span style="color:#dcaeea"&gt;things&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[&lt;/span&gt;&lt;span style="color:#e5c07b"&gt;Any&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;]&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[&lt;/span&gt;&lt;span style="color:#d19a66"&gt;1&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#34;two&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#d19a66"&gt;3.0&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;true&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;for&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;thing&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;in&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;things&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;if&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;let&lt;/span&gt; &lt;span style="color:#dcaeea"&gt;number&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;=&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;thing&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;as&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;?&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;Int&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e5c07b"&gt;print&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;整数&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;number&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;else&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;if&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;thing&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;is&lt;/span&gt; &lt;span style="color:#e5c07b"&gt;String&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e5c07b"&gt;print&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;字符串&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;else&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e5c07b"&gt;print&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;其他&amp;#34;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;type&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;(&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;of&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;:&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;thing&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// prints:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// 整数 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// 字符串&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// 其他 Double&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// 其他 Bool&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;🔥 &lt;code&gt;is&lt;/code&gt; 和 &lt;code&gt;as?&lt;/code&gt; 的区别只有一条：你要不要那个转好的值。只要判断就用 &lt;code&gt;is&lt;/code&gt;，要拿来用就用 &lt;code&gt;as?&lt;/code&gt;。&lt;/p&gt;</description></item><item><title>15 宏与调试</title><link>https://before80.github.io/prgms/Swift/CheatSheet/15-Macros-and-Debugging/</link><pubDate>Wed, 16 Sep 2026 11:00:00 +0800</pubDate><guid>https://before80.github.io/prgms/Swift/CheatSheet/15-Macros-and-Debugging/</guid><description>&lt;h1 id="15-宏与调试"&gt;15 宏与调试&lt;/h1&gt;
&lt;h2 id="宏编译期帮你写代码"&gt;宏：编译期帮你写代码&lt;/h2&gt;
&lt;p&gt;宏不是运行期的魔法，它是&lt;strong&gt;编译器在编译你的代码时，调用另一段代码生成源代码&lt;/strong&gt;。所以它有几个和函数完全不同的性质：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;宏在编译期展开，运行期没有任何额外开销；&lt;/li&gt;
&lt;li&gt;宏的声明和实现&lt;strong&gt;是分开的&lt;/strong&gt;：声明告诉编译器&amp;quot;这个宏叫什么、能长在哪里&amp;quot;，实现在一个单独的编译期插件里；&lt;/li&gt;
&lt;li&gt;宏只能&amp;quot;生成代码&amp;quot;，不能&amp;quot;猜&amp;quot;运行期的值——&lt;code&gt;#stringify(a + b)&lt;/code&gt; 能拿到 &lt;code&gt;&amp;quot;a + b&amp;quot;&lt;/code&gt; 这段源码，但拿不到 &lt;code&gt;a + b&lt;/code&gt; 的值。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="两种形态"&gt;两种形态&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;形态&lt;/th&gt;
 &lt;th&gt;长这样&lt;/th&gt;
 &lt;th&gt;名字风格&lt;/th&gt;
 &lt;th&gt;例子&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;自由宏（freestanding）&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;#名字(...)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;小驼峰&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;#stringify(x)&lt;/code&gt;、&lt;code&gt;#function&lt;/code&gt;、&lt;code&gt;#warning(&amp;quot;...&amp;quot;)&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;附加宏（attached）&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;@名字&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;大驼峰&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;@Observable&lt;/code&gt;、&lt;code&gt;@Test&lt;/code&gt;、&lt;code&gt;@DebugDescription&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;⚠️ 别把老教程里的 &lt;code&gt;@OptionSet&lt;/code&gt; 照抄过来：它&lt;strong&gt;已经从标准库里移除了&lt;/strong&gt;，现在写会报 &lt;code&gt;unknown attribute 'OptionSet'&lt;/code&gt;。它如今只是 swift-syntax 仓库里的一个示例宏。想要位掩码，老老实实手写 &lt;code&gt;struct X: OptionSet&lt;/code&gt;（见 &lt;a href="https://before80.github.io/prgms/Swift/CheatSheet/11-Standard-Library/"&gt;11 标准库&lt;/a&gt;）。&lt;/p&gt;</description></item><item><title>16 血泪速查：最容易写错的地方</title><link>https://before80.github.io/prgms/Swift/CheatSheet/16-Pitfalls-and-Gotchas/</link><pubDate>Sun, 20 Sep 2026 10:30:00 +0800</pubDate><guid>https://before80.github.io/prgms/Swift/CheatSheet/16-Pitfalls-and-Gotchas/</guid><description>&lt;h1 id="16-血泪速查最容易写错的地方"&gt;16 血泪速查：最容易写错的地方&lt;/h1&gt;
&lt;p&gt;前面 15 章是按&lt;strong&gt;知识结构&lt;/strong&gt;组织的，这一章按&lt;strong&gt;症状&lt;/strong&gt;组织——你遇到了怪事，来这里对号入座。&lt;/p&gt;
&lt;p&gt;每一条都严格写成三行：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;你会怎么写&lt;/strong&gt;：看起来完全合理、甚至别的语言里就是对的写法。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;实际发生什么&lt;/strong&gt;：编译器/运行期真的做了什么（不是&amp;quot;理论上可能&amp;quot;）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;正确写法&lt;/strong&gt;：照抄就能过。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;⚠️ 本章所有&amp;quot;实际发生什么&amp;quot;都是在 &lt;strong&gt;Swift 6.4、&lt;code&gt;-swift-version 6&lt;/code&gt;&lt;/strong&gt; 下真跑出来的，包括崩溃信息和退出码。看到 &lt;code&gt;rc=133&lt;/code&gt; 就是进程被 SIGTRAP 干掉——Swift 的 &lt;code&gt;Fatal error&lt;/code&gt; 家族统一是这个退出码。&lt;/p&gt;</description></item></channel></rss>