Search code examples
objective-cswiftclosuresobjective-c-blocks

pass completion block from swift to back to objective


Trying to get completion block back from swift code, but looks like I'm doing something wrong.

My objC code which I want to replicate for my swift view controller TestViewController

I just need Bool and BMError back in completion block

Code in which I'm doing wrong:

TestViewController *changeVC = [[TestViewController alloc] initWithCompletionData:completion ];

My swift code which I tried to replicate like objc function:

@objc public class TestViewController {

    var completionData: ((Bool, BMErrors?) -> Void)?

    public required init?(coder aDecoder: NSCoder) {
        fatalError("Not implemented")
    }

    @objc public init(completionData completion: ((Bool, BMErrors?) -> Void)?) {
        super.init(nibName: nil, bundle: nil)
        self.completionData = completion
    }

    func verifySuccess(result: QuestionResult, error: BMErrors?) {

        if (result.success) {
            // how to pass completionData
        }
    }

}

Solution

  • You can call TestViewController.completionData like this: self.completionData?(false, error) or self.completionData?(false, nil) if you don't want to pass error.