使用者介面
如果進行到這裡,你還沒被建構程式碼所需要的邏輯以及大量的文字牆擊倒,你應該已經一腳踏入 iOS 工程師的大門,具有開發一個雖然基礎,但確實能在 iOS 行動裝置上運行的軟體這個能力。現在,也是時候讓我來解釋一下:為什麼從第一週的一開始,我就使用了角色
這種架構來示範各式各樣的程式碼了。
現在正在讀這篇文章的你、撰寫了這篇教材的我,以及許許多多擁有智慧型手機的使用者,日常生活中或許每天都會接觸各種各樣不同的 APP,而一個行動裝置軟體與使用者最直接的互動,就是視覺。
- 你的同事正在玩當紅的手機遊戲「皇室戰爭」,招喚了一個騎士和兩個弓箭手往前進攻!
- 在你公司樓下的路人正打開「Google Map」,確認他仍在前往地標「鬍鬚張魯肉飯」正確的道路上!
- 你,則剛下載了新貼圖「懶散兔與啾先生:OS職場人生」,正在跟革命夥伴進行圖戰...
這些騎士、弓箭手、地標、貼圖...都是物件的一種,它們的任務就是讓使用者以視覺的方式,了解軟體正在以怎樣的方式運行,它們有一個共同的物件名稱:視圖(View)。
目前的行動裝置顯示介面是一個2D
的平面,很明顯,為了讓每個物件顯示在它們該當出現的位置上,所有物件都會有一個x
座標和y
座標,而騎士和弓箭手這些遊戲物件可能還有生命值、攻擊力等等資訊,Google 地標必然是一個經緯度的組合,貼圖則會以陣列的方式分組,各組內的貼圖或許還有自己的名稱和編號...
這些資訊的集合,不只肩擔讓物件正確的繪製到螢幕上這個重要任務,還掌控了使用者和它們互動,或物件之間的互動所需要的所有資料,我們稱之為:物件的模型(Model)。
而我們在手機螢幕上滑動、點按,或者輸入文字的行為,就是我們和軟體互動的方式,這些行為將會送出各種各樣不同的訊息給我們編譯好的程式碼,而我們通常會設計一個物件,專門處理這些訊息,並更新模型(Model)中的資訊,隨後視圖(View)發現模型中的資訊有變動,再以視覺的方式回饋給使用者。這個處理訊息的物件稱為控制器(Controller)。
在開發手機軟體時常常聽到的「MVC架構」,其實就是 Model+View+Controller 這樣的設計模型。這樣的組合構成了一個具有顯示功能、動態的、可操作的螢幕狀態給使用者,我們稱為使用者介面(User Interface),縮寫為 UI。
提供 使用者(User) <------- 視圖(View) | ↑ 操作| |更新 ↓ | 控制(Controller) ---> 模型(Model) 改動
在目前的架構中,我們的模擬器只提供一份檔案給我們操作,所以沒辦法嚴格的把 MVC 拆分開來,但從程式碼的層面來講,大家大致上也猜的到那些程式碼扮演了那些角色:
- 我們沒有視圖,而暫時以所有
print()
命令來供給使用者視覺。- 我們也無法接收使用者的操作行為,而是用程式碼自行模擬使用者的操作,
前進()
和右轉()
就是典型的控制器會進行的事情。- 最後,自訂類別裡面的常數和變數,構成了一個物件的模型。
在下週拿出 MacBook Pro 開始寫真正的 iOS 軟體時,我們的模型並不會有太大變化(或者說,一個物件必須被顯示出來,最基礎的條件就是要具有x
座標和y
座標,而這是我們的角色
類型已經具備的屬性之一),控制器的行為也只會稍微變動(不過現在使用者可以藉由滑動或點按螢幕來觸發這些行為),視圖則會真正的被建立出來,顯示在 iOS 裝置的螢幕上。
最後附上我很喜歡的一句話「從工程師的角度來看,所謂的 UI 都只是幻覺。而製作 UI,就是在製造幻覺。」
歡迎來到 Swift 的世界,朋友!