只有在swift中条件匹配时,如何才能相继调用转义函数


func conditionalCalling() {
if 1==1 {
hitFirstAPI {
if 2==2 {
hitSecondAPI {
if 3==3 {
hitThirdAPI {
}
}
}
}
else if 3==3 {
hitThirdAPI {

}
}
}
}
else if 2==2 {
hitSecondAPI {
if 3==3 {
hitThirdAPI {

}
}
}

}
else if 3==3 {
hitThirdAPI {

}
}
}

func hitFirstAPI(done: @escaping ()->Void) {

}
func hitSecondAPI(done: @escaping ()->Void) {

}
func hitThirdAPI(done: @escaping ()->Void) {

}

上面的代码给出了我的问题的简单想法,简单地说,如果条件匹配我想一个接一个地调用函数如果不检查下一个条件,如果这是真的,则调用下一个函数,依此类推…

我如何在最少的代码行中做到这一点?

我最初的想法是:

func conditionalCaling() {
if 1==1 {
hitFirstAPI {

}
}
if 2==2 {
hitSecondAPI {

}
}
if 3==3 {
hitThirdAPI {

}
}
}

尽管这种方法只在条件匹配时调用函数,但在一个函数逃脱闭包块后,它将一起调用所有函数NOT

最上面的代码似乎是解决方案,但我想在最少的代码行中做到这一点,有没有其他比周围的if-else语句更好的方法??

您可以将第一次尝试重构为更小、合理的块,如下所示。

import Foundation
func conditionalCalling() {
initiateFlow {
print("Done!")
}
}
func initiateFlow(done: @escaping ()->Void) {
if 1==1 {
hitFirstAPI { initiateSecondAPI(done: done) }
} else {
initiateSecondAPI(done: done)
}
}
func initiateSecondAPI(done: @escaping ()->Void) {
if 2==2 {
hitSecondAPI { initiateThirdAPI(done: done) }
} else {
initiateThirdAPI(done: done)
}
}
func initiateThirdAPI(done: @escaping ()->Void) {
if 3==3 {
hitThirdAPI(done: done)
} else {
done()
}
}
func hitFirstAPI(done: @escaping ()->Void) {}
func hitSecondAPI(done: @escaping ()->Void) {}
func hitThirdAPI(done: @escaping ()->Void) {}

在上面的方法中,您的检查不会不必要地重复,并且它仍然可以在您的第一次尝试中执行您想要的操作(原始流(。

最新更新