我有视图控制器A,它将视图控制器B显示为弹出窗口。我要做的是在视图控制器A中获取一个在视图控制器B中设置的值。
我的想法是,我会通过传入一个带有参数的闭包并让视图控制器B用参数调用它来实现这一点。
所以,在VC A中,我有:
func update(val:String) {
}
然后,当我创建VC B时,我尝试了:
bVC.notifier = update
但是我收到了错误:
Cannot assign value of type '(String, String) -> ()' to type '() -> {}'
然后,在视图控制器B中:
public var notifier = {}
然后我不确定如何调用它。
我读完了:https://stackoverflow.com/a/25681196/2027232但不认为它很好地涵盖了这种情况。
答案 0 :(得分:2)
如果你想这样做,这是一个放在操场上的例子。它使用简单对象而不是视图控制器,但它应该显示所需的语法。
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()