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) {}
在上面的方法中,您的检查不会不必要地重复,并且它仍然可以在您的第一次尝试中执行您想要的操作(原始流(。