使用者介面

如果進行到這裡,你還沒被建構程式碼所需要的邏輯以及大量的文字牆擊倒,你應該已經一腳踏入 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 的世界,朋友!

results matching ""

    No results matching ""