【在 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


<<:  小队快跑 - 是夹心饼乾 或是 承上启下

>>:  [13th-铁人赛]Day 9:Modern CSS 超详细新手攻略 - Specificity

Day 17. 计算属性(Computed) VS 方法(Methods)

昨天介绍了computed的基本使用方式,今天多讲一点点有关methods的, 大家准备好了吗ε٩(...

Day 21. 透过实作设计一个登入页面,掌握 Figma 基本工具

今天来设计每个网页几乎都会有的登入页面吧!跟着 Rson 一起实作完,就能做出下面这张设计稿: 分二...

Vue.js指令(v-bind)绑定(DAY28)

v-bind(属性绑定) 之前所介绍的,若想在html动态的呈现资料可以使用{{ }},但如果今天...

机器人/AGV/AMR安全标准

与国际接轨,免不了的需要共通性标准,即要符合最小有效沟通成本,也要可以将合作伙伴的利益最大化(传说中...

冒险村06 - Auto-update dependencies

06 - Auto-update dependencies 除了 Release Drafter 及...