如何解决仅当条件在 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) {
}
上面的代码简单地说明了我的问题,简单来说,如果条件匹配我想一个接一个地调用函数 strong> 如果不检查下一个条件,如果这是真的调用下一个函数等等......
我怎样才能以最少的代码行做到这一点?
我最初的想法:
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) {}
在上述方法中,您的检查不会不必要地重复,并且它仍然可以在您的第一次尝试中执行您想要的操作(原始流程)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。