Bog*_*hin 2 closures func swift
我需要将这样的func从Objective-C转换为Swift语言。但是找不到示例,也无法获取如何在Swift中将2个闭包发送到func中。
例如,Objective-C中的原始功能:
Run Code Online (Sandbox Code Playgroud)- (void)getForDemoDataWithToken:(Token *)token onSuccess:(void(^)(NSArray *demoData))success onFailure:(void(^)(NSError *error))failure { }
我知道发送1个闭包作为参数:
getForDemoDataWithToken(token){(成功:字符串)->无效
//这里有一些代码
打印(成功)
}
但是,如何发送两个闭包?
谢谢
那这个呢?
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 onSuccess和onFailureclosures 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)