iT邦幫忙

2021 iThome 鐵人賽

DAY 3
0
Mobile Development

在 iOS 開發路上的大小事系列 第 3

【在 iOS 開發路上的大小事-Day03】透過 Global Variable 來傳值

前情提要

一般我們在做傳值動作的時候,會有好幾種方式可以做,像是用 Segue、Closure、Delegate、Global Variable、Notification 等方式,每種都有不同的應用場景,所以就依情況來使用~

今天要介紹的是 Global Variable 傳值 (最不推薦使用)

我們要做的是將第一個畫面上的 TextField 裡的值傳到第二個畫面的 TextView 上
畫面設計這裡就不示範了,大家就自己設計就可以了

全域變數跟區域變數的差別

一般在寫程式的時候,會有「全域變數」、「區域變數」這兩種變數可以使用
但在開發上,我們會盡量避免使用全域變數,而建議使用區域變數
這是因為全域變數的特性是可以在各個檔案中使用,而區域變數只能在該檔案/函式中使用
雖然聽起來好像很方便,但實務上卻並不是那麼好用,因為全域變數本身的特性就是可以在其他檔案中被修改
這會使得程式碼非常複雜,難以閱讀,所以實務上建議還是以使用區域變數為主,全域變數能不用就不用!

雖說如此,但今天我們要利用全域變數可以在各個檔案中使用的特性,來完成兩個頁面的傳值

開始實作囉

首先先宣告一個全域變數 globalVariable
看是要在第一個畫面還是在第二個畫面宣告都可以
這邊是在第一個畫面來做宣告

import UIKit // 這行不用打,只是用來告訴你全域變數的位置而已

var globalVariable: String? // 宣告在 class 外面的叫全域變數

class MainVC: UIViewController { // 這行也不用打,只是用來告訴你全域變數的位置而已
    ...
}

因為 TextField 裡的值是屬於 String 型別,所以這邊宣告的 globalVariable 就讓它屬於 String 型別

接著我們在按下 Button 跳頁到 SecondVC 的 Action 裡,將 TextField 的值給 globalVariable

@IBAction func pushToSecondVC(_ sender: UIButton) {
    let vc = SecondVC(nibName: "SecondVC", bundle: nil)
    globalVariable = textField.text
    self.navigationController?.pushViewController(vc, animated: true)
}

再來,打開 SecondVC.swift,在 viewDidLoad 裡面將 globalVariable 的值給 TextView

override func viewDidLoad() {
    super.viewDidLoad()
    textView.text = globalVariable
}

成果


本篇的範例程式碼:GitHub


上一篇
【在 iOS 開發路上的大小事-Day02】拋棄 Storyboard 改用 Xib 來做全部的 UI 設計吧
下一篇
【在 iOS 開發路上的大小事-Day04】透過 Segue 來傳值
系列文
在 iOS 開發路上的大小事30

尚未有邦友留言

立即登入留言