> ## Content Index
> Fetch the complete content index at: https://ethanhuang13.plus/llms.txt
> Use this file to discover other available public pages before exploring further.

# ✍️我為什麼要寫一本學習 SwiftUI 的書呢？
- URL: https://ethanhuang13.plus/why-write-learning-swiftui-book/
- Published: 2025-03-03T16:00:00.000Z
- Updated: 2025-05-03T14:39:41.000Z
- Description: 從今天開始，我會在 iOS Developer+ 連載「學習 SwiftUI」這本書。付費會員作為第一線支持我的朋友，等書寫完以後，可以直接下載整本電子書，不需額外付費。就學習的角度來說，一週讀一篇，效果應該滿好的，因此鼓勵尚未訂閱的朋友就從現在加入 iOS Developer+。
- Author: 13
- Tags: ✍️ 學習 SwiftUI, SwiftUI, 🆓 免費公開

從今天開始，我會在 iOS Developer+ 連載「學習 SwiftUI」這本書。希望能夠在 4 月底寫完、5 月整理出英文版，並且出版、上架販售電子書。

作為第一線支持我的朋友，等書籍上架後，iOS Developer+ 的付費會員可以直接下載整本電子書，不需額外付費。

之所以要用連載的方式，是因為我要給自己沒有在上班期間的生活，一個目標與固定的節奏。不然我應該會過得很廢。

不過，老實說，對於寫出一本技術的書，**我到現在還是非常沒有把握**。

我出過很多文章、電子報、podcast、YouTube 教學影片，也在研討會演講過，就是沒有寫過書。

這對我來說是「挖坑給自己跳」的全新挑戰。

理性上來說，寫書，應該比我現在的能力稍微難一些，稍微努力一點應該是做得到的。（這是維持學習動力的一個重要策略，就是給自己一個難度比自己實力高一點的課題。因為太簡單會顯得無聊，太難的話一下就會放棄。）

感性上來說，我是一直在「好想把這個觀念講清楚」跟「我幹嘛要跟全世界說我在寫書」之間打架。

我已經想好了整本書的大綱，但是要一章一章寫出來，只能每週往前推進一些。

總之，以上是我真實的情況。希望接下來一段時間，可以持續地在 iOS Developer+ 分享我的心路歷程（當然還有實際的書本內容）。

還請多多支持。

至於為什麼要寫這本書，就從下文的「序章」開始說：

### 我為什麼要寫一本學習 SwiftUI 的書呢？

SwiftUI 從 2019 年推出到現在，已經有將近 6 年的時間，我也用了它 6 年，累積了不少實務經驗。也因為在公司的專案使用，所以與同事們有許多交流。我常常在跟其他 iOS 工程師交流的時候，觀察到他們的一些在學習上的障礙。

身為對學習與認知心理學有著濃厚興趣，而去讀了教育心理系的人來說，我對於怎麼把一個東西學起來一直感到好奇。所以當我發現許多人在學習 SwiftUI 遇到困難，就覺得特別有趣。

換句話說，我覺得 SwiftUI 很好玩，但是對我來說，掌握這項技術的學習過程，比它的內容知識本身還更有意思。

我認為，SwiftUI 其實並不難學，只是學習的時候要有一些策略。

尤其對於有著深厚的 UIKit 知識的資深 iOS 工程師來說，那些 UIKit 的知識對於學習 SwiftUI 往往是一種阻礙。因為**絕大部分 UIKit 的核心觀念，對於掌握 SwiftUI 沒有任何幫助。**

例如物件導向、記憶體管理、UIViewController life cycle 等等觀念。硬要套在 SwiftUI 上，只會感到十分挫折。而且無法掌握更關鍵的思考問題──如何設計與管理狀態。

反倒是一些接觸過其他的類似的前端框架的開發者，例如 Flutter 或者是 React Native，他們在學習 SwiftUI 的時候，往往能夠更快上手。

所以**這本書就是寫來給資深 iOS 工程師**，一起來試試看，在學習 SwiftUI 之前，先把腦中的一些東西先暫時放下，我相信這樣子學起來會容易很多。

另一方面，SwiftUI 的一些特性，讓它需要比較好的文件或者是學習資源，才能讓人確定一些 API 的行為。舉例來說，SwiftUI 有大量的 modifier。而這些 modifier 的作用範圍，以及他們的順序造成的差異呢？通常只有把它寫出來實際看結果，才可以確定。

但是，Apple 雖然有提供大量的文件跟教材，卻缺乏互動性，而且沒有好的編排結構。以致對於學習者需要掌握哪些知識，不太容易形成清楚的心智模型。

市面上有不少以 SwiftUI 教學為核心功能的 App，可以讓人直接嘗試效果。網路上也有大量附帶程式碼範例的文章。而我在本書的範例程式碼，則是想提供另一種取向，也就是直接使用 Preview 來學習。畢竟能夠即時看到一段程式碼的效果，也就是立即獲得回饋，是最快的學習方式。

說到 Preview，SwiftUI 的 Preview 雖然提供了即時回饋的理想。在現實上，它從一開始就有不少問題。不是更新非常慢，就是乾脆無法現。雖然每一年都有更新，但是要把 Preview 運用到足以發揮它的效果，非常考驗開發者的功力。所以，**本書也會提供一些讓 Preview 變得更實用的技巧**。

而最重要的是，我會把 SwiftUI 的知識與開發技能加以分類，讓讀者可以循序漸進地掌握不同的知識分支，而不是東拼西湊。

有了這樣的學習框架，未來有更多的 SwiftUI 知識需要學習時，就可以輕鬆地放在不同的位置，更容易掌握。例如有些 modifier 最好是先熟悉狀態管理，再來學習會比較好。

### 你應該學習 SwiftUI 嗎？

iOS 開發社群對於學習 SwiftUI 的興趣是非常濃厚的。它的語法寫起來相當的簡潔，要快速做出一些東西會很舒服。在合適的條件下，它可以做出很不錯的產品。

不過在實際的工作機會上，很多專案還不見得能使用 SwiftUI，例如說專案需要支援的 iOS 版本還比較舊，所以轉換到 SwiftUI 有先天的限制。或者是特定版本的 SwiftUI 的 bug 不好處理等等。

不過隨著 SwiftUI 推出一年一年的過去，這些現象當作不學習 SwiftUI 的理由會越來越沒有說服力。

總之我覺得，SwiftUI 已經推出了這麼多年，不再是不成熟的技術。如果有好的學習策略，它其實很好玩，也很值得學。

該是時候把它學起來了。

### 這本書適合誰？

這本書**不是**為 iOS 開發初學者撰寫的。如果你是剛開始學習 iOS 開發的新手，或許能夠從本書獲得一些好的學習觀念，但是對於瞭解 SwiftUI 的核心知識，其他教材或書籍的輔助仍是不可或缺。

本書的目標讀者是：

- 有一定 Swift 程式語言經驗的開發者
- 特別是有 UIKit 開發背景的資深 iOS 工程師
- 已經嘗試過 SwiftUI，但感到困惑或挫折的開發者
- 想要建立清晰 SwiftUI 心智模型的開發者

如果你已經熟悉其他描述式 UI 框架（如 React、Flutter 等），SwiftUI 的描述性框架特性應該會很容易上手，但仍然能從本書中得到學習策略的幫助。

### 我的 SwiftUI 背景

我可以說是很幸運地，曾經在一間公司要開發新產品、並且建立新團隊的時候加入。

當時團隊決定使用 SwiftUI 與 [Point-Free](https://www.pointfree.co/?ref=ethanhuang13.plus) 的 [TCA(The Composable Architecture)](https://github.com/pointfreeco/swift-composable-architecture?ref=ethanhuang13.plus)，並且陸續招募了一些優秀的 iOS 工程師。所以我們有機會一起使用 SwiftUI 與 TCA，並且在過程中克服各種挑戰。

（TCA 搭配 SwiftUI 是非常優秀的狀態管理框架。但它不會是本書的重點。）

也因為這間公司因為商業模式的特性，使用者有很高的軟體升級意願，我們只需要支援當前與上一代的 iOS 版本。這就讓我們有機會可以逐年淘汰舊的 SwiftUI 版本，不管是舊的語法、機制，或是 bug。

我們有 3 個專案使用 SwiftUI 及 TCA 開發，畫面很多，功能越來越複雜。配合 TCA 撰寫了大量的測試，在開發中可以見招拆招。

綜合了團隊 3 年半的開發經驗來說，未來的專案還是會優先使用 SwiftUI（以及 TCA）。

至於我自己，平時就有大量的 side projects。大大小小的 SwiftUI app 也超過 10 個。我也從來沒有想過要放棄 SwiftUI。

總之，在合適的情況下，SwiftUI 是很不錯的選擇。

另一方面，這些經驗也讓我感到，一個人要自學 SwiftUI 滿困難的。有團隊一起研究的話，會簡單很多。這也是我想寫這本書的原因。

### 我對於 SwiftUI 的態度

我的新的 iOS 或是蘋果平台的專案都是優先使用 SwiftUI 開發，可以說完全不會想要回去寫 UIKit 了。

但我並不會說 SwiftUI 是最好的選擇，或是完美無缺。（我對於學習 SwiftUI 的動詞向來是「入坑」。）

也不會說只要用 SwiftUI 就可以解決所有問題。有些應用程式或是特定畫面，就是不太適合用狀態管理的方式來開發。

SwiftUI 在特定情況的效能問題，也有待 Apple 持續解決。

不過這個框架的核心精神是好的。

所以，我會希望讀者掌握 SwiftUI 的知識以後，可以在適合的場合使用 SwiftUI，在不適合的場合，就使用其他技術。這才是對待技術比較實際的態度。

讓我們一起享受 SwiftUI 的學習過程吧！