当前位置: 首页 > 资讯 >

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


相关文章:

  • Day55 (React)
  • [DAY9] Boxenn 实作 Entity 与 Value Object
  • 【第六天 - Flutter 多国语系】
  • Day 11 - Roman to Integer
  • 未知的第四天 -新增页面
  • Angular 笔记 CSS 样式篇
  • Day7 HTML 区块标签:div、span
  • Day25. Blue Prism让你远离挑灯夜战的日子 –BP自动登打订单
  • Day13 - [丰收款] 将Django程序,放上Heroku!
  • [Java Day01] 大纲与安装
  • [Day16] Webpack - AssetModules、DevServer
  • [Day4] 预设范例帐户:OE
  • Day 1 - 简介与文章预计撰写方向
  • 2021 Updated CIS-SIR Exam Questions
  • 纯Javascript,使用new Date()制作date picker
  • Pinterest的商业指南(信息图):为什么以及如何在在Pinterest上推广你的业务
  • Python入门教程:Python怎么写
  • Vultr促销码和2020年最新优惠:Vultr注册教程和使用方法
  • 亚马逊选品工具哪个好用:亚马逊卖家选品数据分析工具推荐
  • 最好用的云服务器推荐:什么云服务器稳定好用又便宜
  • 正规社交寻海外cps、网盟合作
  • 国外虚拟主机大全:便宜好用靠谱的国外网站空间推荐大全
  • 俄取消商品知识产权限制 盗版游戏、电影等商标合法化
  • 虚拟信用卡是什么?虚拟信用卡安全吗?怎么用?怎么申请教程
  • 国外VPS服务器主机为什么比较便宜?
  • Linux入门:Linux文件操作教程(目录文件操作和系统资源占用情况操作)
  • 瑞士银行开户指南:0门槛开户欧洲银行卡教程【Dukascopy开户教程】
  • 阿里云国际版怎么注册绑卡购买香港美国新加坡云主机【2020年最新教程】
  • 海外营销周报:谷歌在搜索中取消Q&A功能,FaceBook Marketplace用户总量达 10 亿人 – 知外贸
  • PayPal解决找回密码时无法检验身份问题