Swift 中用于回调实现的接口模拟
Interface analog in Swift for callbacks realization
请帮我在 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
,但我不明白,如何正确使用它。
在 swift
中看起来像这样
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
请帮我在 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
,但我不明白,如何正确使用它。
在 swift
中看起来像这样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