ios - 我们如何将闭包传递给应用流程中的任何 ViewController?
问题描述
在视图控制器 A 中,
var completionBlock: (((String) -> ()))? = nil
&我正在调用完成块,例如(ViewController A):
if let block = completionBlock {
block("block data to pass")
}
我不想将完成数据传递给 ViewController B,而是我想传递给 ViewController C,它是从 ViewController B 呈现的。
简而言之,我想将闭包数据从 ViewController A 传递到 ViewController CI 知道如何通过委托传递数据,只是对闭包感到好奇?
我们怎样才能做到这一点?
解决方案
这只是我快速为您编写的示例代码,您可以根据需要修改对象。希望能解决您的问题。
import UIKit
class ViewControllerA: UIViewController {
var block:(((String) -> ()))? = { input in
print(input)
}
override func viewDidLoad() {
super.viewDidLoad()
self.title = "A"
let VCB = ViewControllerB()
let VCC = ViewControllerC()
VCC.block = block
VCB.VCC = VCC
self.navigationController?.pushViewController(VCB, animated: true)
}
}
class ViewControllerB: UIViewController {
var VCC:ViewControllerC?
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .gray
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if let VCC = VCC {
self.present(VCC, animated: true, completion: nil)
}
}
}
class ViewControllerC: UIViewController {
var block:(((String) -> ()))? = nil
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .yellow
//Will run the block that has been passed
block?("test")
}
}
推荐阅读
- excel - 使用带有 VBA 的表格从另一个工作表复制和粘贴
- python - 在 python 3.6.8 中使用正则表达式的语法无效
- java - 每当我注销时应用程序崩溃,使用firebase进行身份验证
- git - Jenkins-trigger- BitBucket webhook 网络错误问题
- node.js - 返回 api rest with node
- msal.js - 是否建议在 MSAL 中将 loginPopup 或 acquireTokenPopup 用于 Web 应用程序?
- node.js - 护照认证和登录重定向
- apache-spark - 在 Spark Streaming 上使用 HiBench 基准测试时如何设置 blockInterval?
- r - 如何使用ggplot2绘制与排序点叠加的箱线图
- python - 在 AWS Lambda Python 中导航事件