Stanford CS193P (2017 fall) 學習筆記 # 1

Lumanman
Swift Things
Published in
5 min readJul 22, 2018

年初沒看完的課,最近決定要再挑戰一次,同時把每一堂課的重點摘錄下來以便日後翻查。

有關這課程的簡介就不多述了,Jhih-Sian Wu 大大的文章有介紹過,
傳送門:Stanford CS193p學習筆記(iOS11)

所有介面操作的部份會略過。

iOS的重要觀念:

iOS 可以分成四層,最下面的一層最接近硬件,最上面一層最接近用戶

iOS其實是BSD版本的Unix系統

Unix幾乎是用C語言寫的,所以在Core OS運行的程序大多都是用C語言編寫

Core Services是Core OS的面向對象封裝層,如果我們想要做拿到手機在什麼位置或者設備的方向或者訪問文件系統,我們就需要用到這層

Media層能夠對各種媒體,如視頻,音頻以及不同格式的圖片等媒體進行處理

Cocoa Touch 層負責 iOS 的用戶界面,例如按鈕、Slider等控件定義的地方,這一層有一些強大的物件,把物件加到程序,就可以有一些功能,譬如加入 Map Kit就可以有地圖的功能

Swift的重要觀念:

・參數有外部名稱和內部名稱(external name and internal name)

・所有實例變數(instance variable)/屬性(property)的所有屬性都要初始化

・Swift 是個非常強類型的語言(extremely strongly typed),要非常具體地說明你正在使用什麼類型

・Swift同時也是強類型推斷的語言( strong type inference), 能從字面值推斷出類型

・IBOutlet創建一個能和UI溝通的實例變數, IBAction 創建一個能和UI溝通的方法

・屬性觀察器(property observer)會觀察變數的改變,用屬性觀察器可讓 UI和我們class裡的實例變數保持同步

・Swift 裡的方法(method)是可以重名的,但是每一個都要有不同的參數

・Swift的枚舉類型(enumeration)中每個case都可以有關聯值(associated value)

・Optional是一種類型,有且僅有兩種狀態 — — 有值和無值,是個枚舉類型,是通過返回有值或是無值,如果有值就把關聯值回傳,如果無值就回傳nil

翻牌小遊戲實作:

  1. 在storyboard加入一個Button為一張卡片
    用IBAction連接卡片和程式碼,設定卡片時會執行的任務-flipcard()
  2. 用flipCard function控制卡片的顯示樣式
    第一個參數是卡片上的emoji,第二個參數是要控制的UI元件
    判斷按鈕是否已經顯示了emoji
    如果有就翻過去,不顯示字,背景色設為橙色
    如果沒有emoji的話,那就把emoji顯示在白色背景上

3. 複製卡片為第二張卡片,用IBAction連接卡片,用另一個emoji執行flipcard()

4. 加入flipCount variable 紀錄翻牌次數

5. 設定每次按到卡片 flipCount 都會加一

6. 在storyboard加入Label顯示翻過了多少張牌

7. 用IBOutlet連接Label和程式碼

8. 使用 didSet observer,讓flipCountLabel的字在flipCount的值改變時更新

9. 在storyboard加入更多卡片

10. 優化程式碼,減少重複的code,把IBOutlet改為一個button的array,連接所有卡片,把所有卡片連接到flipCard function

11. 用cardButtons.index(of:)取得卡片的在array裡的位置,assign為它的編號cardNumber

12. 增加一個名為emojiChoice的Array作為卡片的emoji內容

13. 用cardButtons.index(of:)取得在emojiChoice中相對位置的emoji為flipCard()的參數

14. 使用if let確定cardButtons的index不是空(都有連到)後轉換卡片的樣式,不然print提示

--

--

Lumanman
Swift Things

Swift learner & sharer | Nothing is wasted, nothing is in vain.