Swift中的接口模拟以实现回调

时间:2018-09-28 11:35:57

标签: swift interface swift-protocols

请帮助我在Swift中创建接口以用于回调目的。

Java示例:

public interface ErrorListener {
    void onError(String errorMsg);
}

class SomeUiClass implements ErrorListener {

    public SomeUiClass () {
        SomeWorkingClass s = new SomeWorkingClass();
        s.setErrorListener(this);
        s.doSomething(true);
    }

    @Override
    void onError(String errorMsg) {
        System.out.println("Error msg: " + errorMsg);
    }
}

class SomeWorkingClass {

    ErrorListener listener;

    void setErrorListener (ErrorListener listener) {
        this.listener = listener;
    }

    void doSomething (boolean withError) {
        if (withError) listener.onError("Test error");
    }

}


//....
SomeUiClass ui = new SomeUiClass(); // prints: Error msg: Test error 

因此,我为此目的尝试在Swift中使用protocol,但我不知道如何正确使用它。

1 个答案:

答案 0 :(得分:1)

很快就会像这样

protocol ErrorListener {
    func onError(errorMsg:String)
} 
class SomeUiClass : UIViewController ,  ErrorListener { 

    func onError(errorMsg:String)
        print("Error msg: ", errorMsg)
    }
}

class SomeWorkingClass : UIViewController{

    weak var listener:ErrorListener?

    func setErrorListener (listener:ErrorListener) {
        self.listener = listener
    } 
} 

let ui = SomeUiClass() // prints: Error msg: Test error