prettyprint

2017年12月22日 星期五

我的 Hello, World


第一個簡單的 App 該怎麼寫?許多書都攏統的寫了一堆,最後 code 程式碼出現了,試跑後,一個完美的結果出現,這時我們學到了什麼?

好像教寫程式就是千篇一律這樣教法,這樣的寫法,能不能換個另外的方式?這樣的教法好像讓我想起了 Assembly 組合語言的年代,即程式語言一直在進步,但教法上依然逗留在石器時代。為何不這樣教?

我的 App 主要的目的用途是什麼?那我需要什麼樣的介面?然後,我又怎樣去實作這個 App 呢?

例如:我想寫一個 Hello, World 的 App 作為練習。那我最後 UI 的呈現方式可能有:

1. 在 iPhone 的畫面上只顯示 "Hello, World!"
2. 按下一個按鈕 Button,然後輸出一個文字字串 "Hello, World!"
3. 還是,按下一個按鈕後,會跳出視窗,視窗上顯示“Hello, World!" 這字串

針對第一個項目,若只是顯示"Hello, World!" 這字串,那在 UI 上我只要加入 Label 這UI Control 控制項即可。

既然 iPhone App 是物件導向設計 Objective Oriented Design,每個物件一定有屬性與方法。例如:Label 有個屬性 Text,而我們只要設定 Text 的值為 "Hello, Wold!" 就好。

若是第二個項目,我們的 UI 需要一個按鈕,點選 click 按鈕後,會將結果 “Hello, World!" 顯示出來。

點選按鈕,然後就顯示文字,這需要寫程式。但,寫完程式後,按鈕這個 UI 又怎麼跟程式 Code 有關聯呢?

最後若是選第三個項目,我們除了要知道第二個項目的運作細節,還要處理按下按鈕後,跳出的視窗細節:這視窗屬於那類的視窗?除了顯示 "Hello, World!" 這文字,如何結束關閉視窗?等等。

第三個項目包含相當多的實作觀念要了解。例如:我們選定跳出的視窗是 Alert 警告視窗。我們會用 UIAlertController 來實作一個 Alert 視窗物件。

為何要用 UIAlertController 呢?由 Apple 官網文件 UIAlertController 得知其繼承 Inheritance 自 UIViewController。 Controller 就像管理者,管理視窗 View 要怎麼呈現。

我們在新增 HelloWorld 這專案 Project 時,選定 Simple View App 這個模板 Template,系統的 default 就帶出一個簡單的 iPhone 畫面,這畫面在 code 程式碼   ViewController.swift 被定義為

class ViewController: UIViewController {
...
}

每個 View 都會由一個 Controller 去管理,這就是為何我們新增 Alert 這個視窗時,必須新增 Controller 的原因。

這看似簡單的第三個項目,實際上已經包含很多 OO (Objective Oriented) 概念及 iPhone App 的設計概念。對剛開始研讀就想一窺就裡的人負擔算是蠻大的。但,學中做,做中學,也是學習的一種方式。有些開發的精髓要隨著 Code 寫久的人才能領略。

PS.  Apple 除了提供 Playground 這互動工具外,另外一個很棒的程式語言測試工具,即 REPL (Read-Evaluate-Print-Loop),這工具在Terminal 環境下操作。

範例 1 :

新增專案後,在 Label 的 Text 屬性設定 "Hello, World!" 即可。



範例 2:

這次我們改用 Button 這個 UI Control,在其Text 屬性設定為 "Hello, World!" ,然後點選 Button 此新增按鈕,按下 Control 鍵不放,之後拖曳至 ViewController.swift,此時會跳出Connect 視窗,將 UI 與 Code 做個關連。


加入程式 print("Hello, World!") 如下:


點選 Hello, World! 這個按鈕後,會將字串 "Hello, World!" 輸出到命令列視窗 (Console)。

範例 3:

在這個範例中,我們實作下列程式:

class ViewController: UIViewController {

    @IBAction func showMessage(_ sender: UIButton) {
        //print("Hello, World!")
        let alert = UIAlertController(title: "My First App", message: "Hello,World!", preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
        self.present(alert, animated: true, completion: nil)
    }   

}

記得要在生成一個 Alert 物件後,要以 self.present() 顯示出來。



執行後,點選 OK 選項按鈕,此 Alert 會關閉。

範例 4:

在 Terminal 環境下,輸入 xcrun swift 指令,即進入 Swift 的 REPL 此互動環境:

要進入 Swift 環境,需要輸入下列指令:

$ sudo xcode-select -s /Applications/Xcode.app/Contents/Developer/

然後輸入:

xcrun swift




/end

沒有留言:

張貼留言

prettyPrint();