在我的代码中我不想使用协议我想使用闭包但我无法完成它因为我是Swift的新手。
以下是类
的示例class SplashPresenterImp: SplashPresenter, OnFinishedListener {
private var interactor: SplashInteractor
private var splashNetworkProtocol: SplashNetworkProtocol
init() {
interactor = SplashNetworking()
}
func startDownloadConfigs(splashNetworkProtocol: SplashNetworkProtocol){
if interactor != nil {
interactor.loadConfigs(listener: self)
self.splashNetworkProtocol = splashNetworkProtocol
}
}
func startDownloadDictionary(splashNetworkProtocol: SplashNetworkProtocol) {
if interactor != nil {
interactor.loadDictionary(listener: self)
self.splashNetworkProtocol = splashNetworkProtocol
}
}
func onFinishedGetDictionary(dictionary: Dictionary) {
//save dictionary
if splashNetworkProtocol != nil {
splashNetworkProtocol.onSuccess()
}
}
func onFinishedGetConfigs(config: Config) {
//save configs
if splashNetworkProtocol != nil {
splashNetworkProtocol.onSuccess()
}
}
func onFinishedWithError(error: AMError) {
if splashNetworkProtocol != nil {
splashNetworkProtocol.onError(error: error)()
}
}
}
这是协议
protocol SplashNetworkProtocol: class {
func onSuccess()
func onError(error: AMError)
}
当downloadConfig完成后,我希望在我的viewcontroller上有关闭以启动downloadDictionary。
我知道它如何处理Java这里是代码
mPresenter.startDownloadConfigs(new SplashNetworkProtocol() {
@Override
public void onSuccess() {
downloadDictionary();
}
@Override
public void onError(final AMError error) {
}
});
我想在swift中获得相同的结果。有人能给我建议怎么做吗?
更清楚的是,我希望摆脱SplashNetworkProtocol
并仅使用闭包。
快速的结果应该是这个
mPresenter.startDownloadConfigs(onSuccess: {} onError{}
答案 0 :(得分:0)
应该如此简单:
func startDownloadDictionary(onSuccess: () -> Void, onError: () -> Void)
但更好的是使用一个处理成功和错误的闭包。例如,将错误作为可选参数:
func startDownloadDictionary(onCompletion: (Error?) -> Void)
一个完整的例子:
func someOtherFunc() {
startDownloadDictionary(onCompletion: {(error) -> Void in
if let error = error {
print(error.localizedDescription)
}
//no error
})
}
func startDownloadDictionary(onCompletion: (Error?) -> Void)
{
//dostuff
var error: Error?
// if error happens, create it
onCompletion(error)
}
如果您需要有关Swift闭包语法的帮助,这是一个很好的资源: http://fuckingswiftblocksyntax.com/