使用参数在其他视图控制器上设置闭包

时间:2017-03-14 12:22:02

标签: swift closures

我有视图控制器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但不认为它很好地涵盖了这种情况。

1 个答案:

答案 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()