ios - 使用函数类型或闭包来动态调用函数

标签 ios swift closures

我做了一些研究,但无法解决我的问题。也许是因为我的 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/

相关文章:

xcode - 'openParentApplication(_ :reply:)' is unavailable error

javascript - 无法在尝试的验证函数中访问 javascript 父函数 - 可能需要关闭

javascript - 动态创建的元素和传递参数的事件绑定(bind)

ios - 从 Xib 加载的 UIView 不能正确应用 AutoLayout

ios - CollectionView 委托(delegate)在 URL 连接完成之前调用

iphone - 母语国家列表

ios - 如何自定义 UICollectionView Cell 以显示如附件所示的图像网格?

ios - 如何将信息从一个 IBAction 传输到另一个 IBAction

ruby - 如何将多个 block 传递给 ruby​​ 中的方法?

SwiftUI Apple Watch 应用程序在发布版本时崩溃(仅限系列 3)