gpt4 book ai didi

ios - 我们如何将闭包传递给应用程序流中的任何 ViewController?

转载 作者:行者123 更新时间:2023-11-28 20:53:39 24 4
gpt4 key购买 nike

在 View Controller A 中,

var completionBlock: (((String) -> ()))? = nil

& 我正在调用完成 block (ViewController A):

if let block = completionBlock {
block("block data to pass")
}

我不想将完成数据传递给 ViewController B,而是想传递给从 ViewController B 呈现的 ViewController C。

简单来说,我想将闭包数据从 ViewController A 传递到 ViewController C。我知道如何使用委托(delegate)传递数据,只是对闭包感到好奇?

我们怎样才能做到这一点?

最佳答案

如果这个 block 是你需要在几个 viewController 之间传递的东西,你有几个选择:

1- 将闭包作为变量传递:在 VC-A、VC-C 中间的每个新 ViewController 上创建一个变量,并在两者之间传递它们

例如:

//View Controller B:
var block:(((String) -> ()))? = nil

//Pass from A-B
if let viewcontrollerB = XXXX { //instantiate ViewController B from A
viewcontrollerB.block = self.block
}


//ViewController C:
var block:(((String) -> ()))? = nil

//Pass from B-C
if let viewcontrollerC = XXXX { //instantiate ViewController C from B
viewcontrollerC.block = self.block
}

//Call the block from ViewController C
if let block = self.block {
block("block data to pass")
}

2-通过通知中心您可以将此 block 从任何 View Controller 传递到任何其他 View Controller :

//send notification:
let notification = Notification(name: Notification.Name("pass block"), object: block, userInfo: nil)
NotificationCenter.default.post(notification)

3-从共享对象访问使用单例设计并创建静态共享对象并从不同的 View Controller 读取/写入该对象

//AppDelegate:
static var block:(((String) -> ()))? = nil

//ViewController A:
AppDelegate.block = XXX

//ViewController C:
if let block = AppDelegate.block {
block("block data to pass")
}

关于ios - 我们如何将闭包传递给应用程序流中的任何 ViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54782250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com