如何在Swift中使用两个闭包作为参数创建函数?

Bog*_*hin 2 closures func swift

我需要将这样的func从Objective-C转换为Swift语言。但是找不到示例,也无法获取如何在Swift中将2个闭包发送到func中。

例如,Objective-C中的原始功能:

- (void)getForDemoDataWithToken:(Token *)token
onSuccess:(void(^)(NSArray *demoData))success
onFailure:(void(^)(NSError *error))failure {
}
Run Code Online (Sandbox Code Playgroud)

我知道发送1个闭包作为参数:

getForDemoDataWithToken(token){(成功:字符串)->无效

//这里有一些代码

打印(成功)

}

但是,如何发送两个闭包?

谢谢

Luc*_*tti 5

那这个呢?

宣言

func getForDemoDataWithToken(
    token: Token,
    onSuccess: (demoData:NSArray?) -> (),
    onFailure: (error:NSError?) -> ()) {

}
Run Code Online (Sandbox Code Playgroud)

调用方式

getForDemoDataWithToken(Token(),
    onSuccess: { (demoData) -> () in

    },
    onFailure: { (demoData) -> () in

    }
)
Run Code Online (Sandbox Code Playgroud)

更快捷的方法

我通常会在Swift代码中只使用一个闭包。因此,您可以只拥有2个distinct onSuccessonFailureclosures completion

接下来,我们应该记住它NSArray与Swift兼容,但这不是使用数组的最快捷方式。

让我们看一个应用上述两个概念的示例。

func getForDemoData(token:Token, completion:(data:[Foo]?, error:NSError?) -> ()) {

}
Run Code Online (Sandbox Code Playgroud)

您可以使用trailing closure语法来调用它。

getForDemoData(Token()) { (data, error) -> () in
    if let data = data where error == nil {
        // success!
    } else {
        // oh no... something wrong here
    }
}
Run Code Online (Sandbox Code Playgroud)