互動式教學

Swift 入門

動手做的入門教學,一次一題。 參考 Swift 官方文件與 CS61A 的節奏:先讀一個小觀念、看一段小程式,然後在執行之前,先想想它會做什麼。

依照 CS61A(2026 秋季)的課程順序,Swift 內容依據《The Swift Programming Language》(Swift 6.4)。

每一課怎麼進行

每一課就像一堂 CS61A 的課:簡短的講義與小程式,接著是問題。「Swift 會印出什麼?」要你預測輸出(程式會出錯就輸入 Error);程式重組題要你把打亂的程式行排回正確順序。每課最後都有一份實作,請在自己的電腦上撰寫並執行,準備好了再打開解答。

單元 1

用函式建立抽象

運算式、名稱與函式;流程控制;接收與傳回函式的函式;以及遞迴。對應 CS61A 的前四週。

  1. 01開始之前

    從打下程式碼到看見輸出,中間發生了什麼? · EnglishCS61A · Welcome

    可閱讀
  2. 02名稱與函式

    替一段運算取名字,代表什麼? · EnglishCS61A · Functions

    可閱讀
  3. 03流程控制

    程式怎麼決定下一步要做什麼? · EnglishCS61A · Control

    可閱讀
  4. 04高階函式

    當函式本身也是值,會有什麼不同? · EnglishCS61A · Higher-Order Functions

    可閱讀
  5. 05環境與閉包

    一個名稱的值,是從哪裡來的? · EnglishCS61A · Environments

    可閱讀
  6. 06函式抽象

    一個函式應該承諾什麼、隱藏什麼? · EnglishCS61A · Abstraction · Function Examples

    可閱讀
  7. 07遞迴

    一個函式還沒寫完,怎麼能先相信自己? · EnglishCS61A · Recursion

    可閱讀
  8. 08樹狀遞迴

    一次呼叫變成兩次,會發生什麼事? · EnglishCS61A · Tree Recursion

    可閱讀

單元 2

用資料建立抽象

序列、容器、Optional、自訂型別、遞迴資料、可變狀態、類別、協定、惰性序列與效率。對應 CS61A 第五到第九週。

  1. 09序列

    對任何有順序的東西,可以做些什麼? · EnglishCS61A · Sequences

    可閱讀
  2. 10字典、集合與元組

    哪一種容器適合回答哪一種問題? · EnglishCS61A · Containers

    可閱讀
  3. 11Optional

    該怎麼表達「這裡可能什麼都沒有」? · EnglishCS61A · Containers (Swift-specific)

    可閱讀
  4. 12結構與列舉

    怎麼讓不合法的狀態根本寫不出來? · EnglishCS61A · Objects

    可閱讀
  5. 13鏈結串列與樹

    一個型別怎麼能包含自己? · EnglishCS61A · Linked Lists · Trees

    可閱讀
  6. 14可變狀態與值語意

    改了一個東西,什麼時候會連帶改到另一個? · EnglishCS61A · Mutation

    可閱讀
  7. 15類別與繼承

    什麼時候共用同一個物件才是你要的? · EnglishCS61A · Classes · Inheritance

    可閱讀
  8. 16協定與泛型

    怎麼替還不存在的型別寫程式? · EnglishCS61A · Object Examples (interfaces)

    可閱讀
  9. 17疊代器與惰性序列

    能不能處理一個永遠不會結束的序列? · EnglishCS61A · Lazy Evaluation · Generators

    可閱讀
  10. 18效率與記憶化

    為什麼同一個答案,有時要算那麼久? · EnglishCS61A · Efficiency

    可閱讀

單元 3

與外界互動的程式

代數資料型別、直譯器、錯誤處理、並行、測試與套件。對應 CS61A 最後幾週,以 Swift 取代 Gleam 與 SQL。

  1. 19代數資料型別與模式比對

    如果編譯器幫你檢查每一種情況呢?CS61A · Functional Programming · Algebraic Data Types · Immutable Data

    規劃中
  2. 20寫一個直譯器

    要讓一個語言跑起來,需要什麼?CS61A · Interpreters

    規劃中
  3. 21錯誤處理

    函式做不到該做的事時,應該怎麼辦?CS61A · Debugging

    規劃中
  4. 22使用 async 與 await 的並行

    怎麼等待,卻不讓一切停下來?CS61A · Browsers · Applications

    規劃中
  5. 23測試

    怎麼知道你的程式是對的?CS61A · Software Testing · Software Tracing

    規劃中
  6. 24建立 Swift 套件

    程式碼怎麼變成別人也能使用的東西?CS61A · Applications · Conclusion

    規劃中