Ios 如何将此代码正确移植到Swift
PubNub在iOS SDK中提供了以下代码片段,用于在客户端因应用程序从活动状态辞职而挂起之前调用某些客户端方法:Ios 如何将此代码正确移植到Swift,ios,iphone,swift,pubnub,Ios,Iphone,Swift,Pubnub,PubNub在iOS SDK中提供了以下代码片段,用于在客户端因应用程序从活动状态辞职而挂起之前调用某些客户端方法: - (void)pubnubClient:(PubNub *)client willSuspendWithBlock:(void(^)(void(^)(void(^)(void))))preSuspensionBlock { if ([client isConnected]) { preSuspensionBlock(^(void(^completionBlock)(
- (void)pubnubClient:(PubNub *)client willSuspendWithBlock:(void(^)(void(^)(void(^)(void))))preSuspensionBlock {
if ([client isConnected]) {
preSuspensionBlock(^(void(^completionBlock)(void)){
[client sendMessage:@"Hello my friend" toChannel:[PNChannel channelWithName:@"boom"]
withCompletionBlock:^(PNMessageState state, id data) {
if (state != PNMessageSending) {
NSString *message = @"Message has been sent";
if (state == PNMessageSendingError) {
// Handle message sending error
}
// Always call this block as soon as required amount of tasks completed.
completionBlock();
}
}];
});
}
}
现在,XCode足够聪明,可以将方法声明中的疯狂块语法转换为以下语法,我想这很好:
public-func-PubNub客户端(客户端:PubNub!,willSuspendWithBlock-PressPersionBlock:((((((((()->Void)!)->Void)!)->Void)!
但我真的不知道如何连接这条线路:
presspensionblock(^(void(^completionBlock)(void))
Blocks语法总是让我头疼。PubNub.sendMessage(chatMessage,googleCloudNotification:nil,toChannel:chatChannel,storeInHistory:true){(state,obj)->Void in
if (state != PNMessageState.Sending){
println("Message has been sent")
if(state == PNMessageState.SendingError){
completionHandler(responseStatus: RespStatus.unExpectedServerError)
}
else{
completionHandler(responseStatus: RespStatus.responseSuccess)
}
}
}
objective-c代码是一个Prespension方法,它接受一个块,该块返回一个不接受任何参数的块。请尝试以下操作:
var x: (()-> () -> Void) = { () -> ()->Void in
return {() -> Void in
println("this is returned inner void block")
}
}
preSuspensionBlock(x);
我也是…你发现什么了吗?如果你的问题是背景,我最终使用“shouldlrunclientbackground”来正确使用pubnub和背景。。。