畫面切換,彼此間要傳遞參數這是常碰到的。在此我以物件導向 Object Oriented 的觀點,來看參數如何在 2 個畫面間傳遞。 既然是兩個畫面 View,每個UI 的 View 就會對應到一個 View Controller。所謂 "對應",就是 UI 的 View 會有屬性 ID 設定,指定這 View 屬於那一個類別 Class。 既然是類別,那就是談到 Code 的實作。Swift 大大改進 Objective-C,將類別的宣告 header file 與 類別的實作都放在同一個檔案 .swift 裏。 定義好 UI View 的類別,那 2 個 View 之間的變數又該如何傳遞 ? Apple 提供一個函式 prepardForSegue:sender , 即在前一個 View Controller 的類別中,我們呼叫此函式,將變數傳遞到下一個 View Controller。 我們以一個範例來說明。 首先,我們會有兩個 View。 View 1 指定為 FirstViwController, View 2 指定為 SecondViewController。 這兩個類別都是繼承 UIViewController。 雖然它們的父類別 Parent Class 都繼承相同類別,但,由於 FirstViewController 與 SecondViewController 的"長相"不同,所以需設定 2 個不同的類別。這裡所謂"長相",即它們各自的屬性 Property 與能提供的功能 Function (或 Method) 都不相同,當然要設計成 2 個不同的類別。每個類別將 Property 與 Method 封裝 Encapsulate 起來,這是 Object Oriented 最基本的概念。 假設我們設定 FirstViewController 有屬性 senderVar 被宣告如下:import UIKit class FirstViewController:UIViewController { override fun viewDidLoad() { var senderVar:String = "test" } ... }
而在 SecondViewController 有屬性 receiverVar 被宣告如下:import UIKit class SecondViewController:UIViewController { var receiverVar:String println("Receive Var : \(receiverVar)") }
現在我們也知道 Apple 提供 prepardForSegue:sender 這函式,但,該如何使用呼叫 ? 同樣我們以 code 來說明。import UIKit class FirstViewController:UIViewController { override func prepareForSeque(seque:UIStoryboardSeque, sender:AnyObject!) { var secondViewController = seque.destinationViewController as SecondViewController secondViewController.receiverVar = senderVar } ... }
看到沒? 我們在第一個類別 FirstViewController 透過呼叫 prepardForSegue:sender 這函式, 宣告一個 SecondViewController 物件為 secondViewController,然後將 FirstViewController 的變數 senderVar 指定給 SecondViewController 的變數 receiverVar,而在第二個 View 顯示出來。 在 Object Oriented 的觀念裡,外人的物件 Object 是無法直接使用,必須透過物件才可。 後記: 知道這設計的概念,對以後類似不同類別間的呼叫就能得心上手。 Code 只是表面,但 Code 裡面所包含的觀念若很清楚,寫程式就相對輕鬆多了。例如: Object Oriented 的設計與語法必須熟練,畢竟現在無論是 UI 或 Code 的設計,其中心觀念都圍繞在 Object Oriented。
prettyprint
2015年10月15日 星期四
以 Object Oriented 觀點看 2 個畫面如何傳遞參數
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言