Swift—闭包、代理实现反向传值(附具体代码)
在iOS开发过程中,我们经常会有这样的一个需求,假设有两个界面:ViewControllerA、ViewControllerB,我们从ViewControllerA进入到ViewControllerB,想把ViewControllerB中的值传回ViewControllerA(反向传值问题),下面介绍闭包和代理两种方法来处理.
这两种方法其实实现的思路是非常类似的,大致分为三个过程:定义、调用、实现.代理传值多一个设置代理的步骤.
闭包传值:
定义:从哪个界面传值,就在哪个界面定义,本案例中是ViewControllerB.
调用:从哪个界面传值,就在哪个界面调用,本案例中是ViewControllerB.
实现:想传递到哪个界面,就在哪个界面实现,本案例中是ViewControllerA.
下面是具体实现代码:
ViewControllerA:
-
import UIKit
-
class ViewControllerA: UIViewController{
-
override func viewDidLoad() {
-
self.view.backgroundColor = .white
-
}
-
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
-
let viewB = ViewControllerB()
-
self.present(viewB,animated: true)
-
//闭包实现
-
viewB.closure = { age,sentense in
-
print("\(age)------\(sentense)")
-
}
-
}
-
}
ViewControllerB:
-
import UIKit
-
class ViewControllerB :UIViewController{
-
//闭包定义
-
var closure:((Int,String)->())?
-
override func viewDidLoad() {
-
self.view.backgroundColor = .brown
-
}
-
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
-
//闭包调用
-
closure!(1314,"Hyx Love Hxy")
-
self.dismiss(animated: true)
-
}
-
}
代理传值:
ViewControllerA:
-
import UIKit
-
class ViewControllerB :UIViewController{
-
//代理定义
-
var delegate:Transmit?
-
override func viewDidLoad() {
-
self.view.backgroundColor = .brown
-
}
-
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
-
//代理调用
-
delegate?.transmitData(year: 1314, sentense: "Hyx Love Hxy")
-
self.dismiss(animated: true)
-
}
-
}
-
//协议
-
protocol Transmit{
-
func transmitData(year:Int,sentense:String)
-
}
ViewcontrollerB:
-
import UIKit
-
class ViewControllerB :UIViewController{
-
//代理定义
-
var delegate:Transmit?
-
override func viewDidLoad() {
-
self.view.backgroundColor = .brown
-
}
-
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
-
//代理调用
-
delegate?.transmitData(year: 1314, sentense: "Hyx Love Hxy")
-
self.dismiss(animated: true)
-
}
-
}
-
//协议
-
protocol Transmit{
-
func transmitData(year:Int,sentense:String)
-
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgbigcc
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01