gpt4 book ai didi

swift - 使用参数在其他 View Controller 上设置闭包

转载 作者:行者123 更新时间:2023-11-28 12:28:16 25 4
gpt4 key购买 nike

我的 View Controller A 将 View Controller B 呈现为弹出窗口。我想要做的是获取在 View Controller B 中设置的值,返回到 View Controller A。

我的想法是,我将通过传入一个带有参数的闭包并让 View Controller B 使用该参数调用它来完成此操作。

所以,在 VC A 中,我有:

func update(val:String) {
}

然后,当我创建 VC B 时,我尝试了:

bVC.notifier = update

但是我得到了错误:

Cannot assign value of type '(String, String) -> ()' to type '() -> {}'

然后,在 View Controller B 中:

public var notifier = {}

那我真的不知道怎么调用它。

我已通读:https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html#//apple_ref/doc/uid/TP40014097-CH11-ID94但不要认为它很好地涵盖了这种情况。

最佳答案

如果你想这样做,这里有一个放在 Playground 上的例子。它使用简单的对象而不是 View Controller ,但它应该显示所需的语法。

class A {
func doSomething() {
let myB = B()
myB.notifier = { (s1, s2) in
print("\(s1) : \(s2)")
}
myB.give()
}
}

class B {
typealias ReturnRoutine = (String, String) -> ()
var notifier: ReturnRoutine?

func give() {
if let notifier = notifier {
notifier("First", "Second")
}
}
}

let myA = A()
myA.doSomething()

关于swift - 使用参数在其他 View Controller 上设置闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42785889/

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