【在 iOS 开发路上的大小事-Day05】透过闭包 (Closure) 来传值

前情提要

一般我们在做传值动作的时候,会有好几种方式可以做,像是用 Segue、Closure、Delegate、Global Variable、Notification 等方式,每种都有不同的应用场景,所以就依情况来使用~

前面已经有介绍过 GlobalVariable、Segue 传值了

今天要介绍的是闭包 (Closure) 传值

我们要做的是将第一个画面上的 TextField 里的值传到第二个画面的 TextView 上
画面设计这里就不示范了,大家就自己设计就可以了
首先我们在 MainVC.swift 里先设计一个 Function,定义这个 Closure 要来接收第一个画面上 TextField 的值

// 透过闭包 (closure) 来传值
func closureSendValue(_ handler: (String) -> Void) {
    guard let text = textField.text else { return }
    handler(text)
}

这边宣告了一个 handler 的变数,型别为 (String) -> Void,也就是 Closure
我们给了一个 String 的接收值跟 Void 的回传值 (也就是无回传值)
并让 Closure 透过 text 来接收 TextField 的值

接着在 SecondVC.swift 里先宣告一个变数 mainVC 型别为 MainVC,然後在需要用到的地方来呼叫刚刚在 MainVC.swift 里定义的 Closure,这边是示范在 viewDidLoad 里呼叫,然後将值显示在 TextView 上

var mainVC: MainVC?
    
override func viewDidLoad() {
    super.viewDidLoad()
    mainVC?.closureSendValue({ text in
        textView.text = text
    })
}

在 MainVC.swift 跳页按钮的 Action Function 里加入下方的程序码 (有写注解的那行)

@IBAction func pushToSecondVC(_ sender: UIButton) {
    let vc = SecondVC(nibName: "SecondVC", bundle: nil)
    vc.mainVC = self // 加入这一行,将 SecondVC 里的 mainVC 指向 MainVC 这个档案
    self.navigationController?.pushViewController(vc, animated: true)
}

成果


本篇的范例程序码:GitHub

参考资料:https://reurl.cc/O0gv33


<<:  什麽是AutoML

>>:  RxJava - Backpressure

第 5 集:CSS 社交距离(上)

此篇会介绍 Bootstrap 常用的对齐语法注意事项以及常见问题分为上下两集。上集介绍 displ...

30天程序语言研究

今天是30天程序语言研究的第十天,研究的语言一样是python,今天主要学习的是module的使用和...

Ruby幼幼班--Majority Element

偶尔分享一下新歌... Majority Element 题目连结:https://leetcod...

30天打造品牌特色电商网站 Day.20 网站图片排版

图片是网站关键的视觉元素,更不用说电商网站了,相信大家都会在图片下功夫,让商品能够更加吸引顾客购买。...

Day 27. Zabbix 实际报警案例分享 - 执行绪异常飙高

计画性停电後, Zabbix 一直疯狂跳警报,因为我们有设置只要警报有被触发 Line 群组 就会跳...