我需要将这样的func从Objective-C转换为Swift语言。但是找不到示例,也无法获取如何在Swift中将2个闭包发送到func中。
例如,Objective-C中的原始功能:
- (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?) -> ()) { }
getForDemoDataWithToken(Token(), onSuccess: { (demoData) -> () in }, onFailure: { (demoData) -> () in } )
我通常会在Swift代码中只使用一个闭包。因此,您可以只拥有2个distinct onSuccess
和onFailure
closures completion
。
接下来,我们应该记住它NSArray
与Swift兼容,但这不是使用数组的最快捷方式。
让我们看一个应用上述两个概念的示例。
func getForDemoData(token:Token, completion:(data:[Foo]?, error:NSError?) -> ()) { }
您可以使用trailing closure
语法来调用它。
getForDemoData(Token()) { (data, error) -> () in if let data = data where error == nil { // success! } else { // oh no... something wrong here } }