如何只在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) {}
在上面的方法中,您的检查没有不必要的重复,它仍然按照您第一次尝试时的要求进行(原始流程)。
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) {}
在上面的方法中,您的检查没有不必要的重复,它仍然按照您第一次尝试时的要求进行(原始流程)。