我做了一些研究,但无法解决我的问题。也许是因为我的 Swift 技术不好 :(
我确实有一个开关盒。在每种情况下,我都做同样的事情,但调用不同的函数。有没有一种好方法可以将重复的逻辑移到 switch case 之外,只在 case block 中设置所需的功能?每个函数的参数也是一样的。
这是一个示例代码:
switch index {
case 0:
//do some stuff
myFuncCase_1(onCompletion: {
//do some async stuff
})
//do some more stuff
case 1:
//do some same stuff
myFuncCase_2(onCompletion: {
//do some same async stuff
})
//do some more same stuff
default: break
}
所以,唯一的区别是我将调用的函数的名称。
有闭包或函数类型的好的解决方案吗?
最佳答案
您可以使用嵌套函数来实现这一点。
typealias Callback = (() -> Void)!
func someFunc() {
func switchExecution(_ function: ((_ completion: Callback) -> Void)!) {
//do some stuff
function {
//do async stuff
}
//do some more stuff
}
switch index {
case 0:
switchExecution(myFuncCase_1)
case 1:
switchExecution(myFuncCase_2)
default: break
}
}
关于ios - 使用函数类型或闭包来动态调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48321378/