WFU

2023年4月11日 星期二

Chapter 04 進階說明 Hello World App 的原理

讀者:楊于葳




本文為「iOS 12 App 程式開發實務心法:30 個製作專業級 iOS App 完全實戰攻略」這本書的閱讀筆記與實作記錄的目錄,目的是希望幫助想利用 Swift 從頭建立一個自己心目中的 App 的人。以下是「Chapter 04 進階說明 Hello World App 的原理」的筆記內容。




4.1 了解實作與介面

如果以電視和電視遙控器來做比喻的話,按鈕指的就是「介面」(interface),而隱藏在按鈕背後的運作細節,就是實作(implementation),介面與實作之間透過訊息溝通,達到目的。

把相同的概念放進 iOS 程式世界中,Storyboard 的使用者介面就是「介面」,而程式就是「實作」;我們加入的按鈕就是「介面」,而 ViewController 類別的 showMessage(sender:) 方法就是「實作」。

只要按下按鈕,按鈕就會經過 showMessage(sender:) 的觸發,傳送一個showMessageWithSender 訊息到 ViewController 類別裡,這樣的過程就是「物件導向程式設計」(Object Oriented Programming)中叫「封裝」(Encapsulation)的觀念。


4.2 觸控背後


「Hello World」 按鈕與 showMessage(sender:) 之間是怎麼運作的呢?

一個 UI 元件(例如:按鈕),可以監聽到特定的觸控事件,當這個事件被觸發時,這個物件就會呼叫與這個事件關聯的「預設方法」,這就是其運作原理。

如果要檢查兩者之間的關聯性,我們可以在工具區查看兩者的狀態。打開工作區的連結檢閱器(Connection Inspector),可以看到 Sent Events欄位底下的 Touch Up Inside 右側連接著 ViewController showMessageWithSender。




Hello World 是如何一步一步被觸發的,在本書的第65頁圖4.3的地方,有清楚說明:

1、點選按鈕

2、iOS偵測到你的觸碰,並觸發觸控事件

3、當手指離開後,「Touch Up Inside」事件被觸發

4、呼叫關聯此事件的 showMessage() 方法

5、在畫面上呈現「Hello World」訊息


4.3 深入了解showMessage方法

在開發iOS App安裝程式後,我們不需要從頭撰寫所有的功能,因為 iOS SDK 已經綁進了許多內建的函數,讓開發者的工作可以更輕鬆,而這些函數就叫做「API」,是用所謂的「框架」(framework)來組成的,UIKit 框架就是其中一種,裡面提供了許多建構與管理App使用者介面的類別和函數,例如:UIViewController、UIBotton、UIAlertController 都是來自 UIKit 框架。

在我們使用任何框架中的函數之前,必須要先匯入(import)UIKit 框架,所以我們會一直在 ViewController.swift 檔案的最前方,一直看到這樣的敘述:


import UIKit



打開 Xcode,在左邊的專案導覽器裡,選擇 ViewController,就可以看到下方的程式碼,接著會針對所有第一次出現的「關鍵字」細項說明。




從第三章就一直提到「showMessage(sender:) 方法」,到底什麼是「方法」(method)呢?透過程式碼,讓元件賦予特定功能或執行特定的任務,就叫做「方法」。一個方法不一定要帶入參數,如果不放參數,只要寫一對空括號就可以了。


func showMessage()



在類別裡的方法,我們用名稱來識別,如果有需要的話,方法可以帶入參數(parameter),參數定義在括號內,每一個參數都有它的名稱和型態,以冒號(:)來分開。

以這個例子來說,這個方法接受一個具有 UIBotton 型態的 sender 參數,而這個 sender 參數表示物件傳遞了需求,告知使用者已經按下按鈕了。

@IBAction 關鍵字,可以讓我們將程式碼與介面建構器的使用者介面物件連結在一起,當 @IBAction 關鍵字被插入宣告的方法中,就表示將方法公開給介面建構器的意思。




4.4 使用者介面與程式碼的關係

建立模板時,Version 14.2 版本沒有如書上「Single View Application」可以選擇,因此我選擇的模板是「App」。

當專案模板被使用之後,會自動在介面建構器中,建立一個預設的視圖控制器,並產生了 ViewController.swift。除此之外,這個視圖控制器自動連結定義在 swift 檔中的 UIBotton 類別。




4.5 UIViewController 與視圖控制生命循環

UIViewController 是 iOS App 的基礎模組,存放 UI 元件與顯示在畫面上的控制元件。

預設的 UIViewController 有一個空的視圖,要讓視圖與使用者之間有互動功能,我們就要建立一個來自 UIViewController 的新類別,也就是 ViewController,程式碼如下:


class ViewController: UIViewController



那麼,什麼是 viewDidLoad 呢?viewDidLoad 是處理視圖狀態的其中一個方法,由於視圖可視狀態的改變,視圖控制器也接收了不同的事件,在適當的時間, iOS 在視圖的狀態改變時,會自動呼叫特定的 UIViewController 方法。


4.6 「執行」按鈕背後的動作原理

按下「執行」按鈕後,程序可被拆分成三個階段:「編譯」(Compile)、「封裝」(Package)、「執行」(Run)。

編譯(Compile):Swift 程式碼只是提供開發者撰寫與閱讀使用的,iOS本身並不認識 Swift 程式碼,所以必須將 Swift 程式碼轉譯成機器碼,這個過程就叫編譯。Xcode 有內建的編譯器來轉譯程式碼。

封裝(Package):一個 App 通常會包含許多資源檔,像是圖片、文字、聲音檔等,把所有的資料和操作資料的方法包裝在一起,製作成最後的 App,就是封裝。

執行(Run):就是啟動模擬器,並且載入我們設計的 App。


4.7 本章小結

現在我們應該對 Hello World App 的運作原理有了基本的概念,只要跟著本書之後的章節來練習撰寫更多的程式碼,並且開發真實的 App 後,你將會獲得更多,所以以 iOS 程式設計的概念。