如何只在swift条件匹配时才依次调用转义函数?

How to call escaping function one after another only when condition matches in 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) {
        
    }

上面的代码给出了我的问题的简单思路,简单来说,if condition matches I want to call functions 一个接一个如果不检查下一个条件,如果是真的调用下一个函数等等...

我怎样才能用最少的代码行做到这一点?

我最初的想法:

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) {}

在上面的方法中,您的检查没有不必要的重复,它仍然按照您第一次尝试时的要求进行(原始流程)。