2016-03-30 15 views
0

私はすぐにコードを変換することができたらいいと思います。メソッドの宣言型がどのようなもので、どのようなものが使われているのか教えてください。objcではこの構文の意味は何ですか?

-(void)sync:(void (^)(UIBackgroundFetchResult result))handler { 

// Make sure not to launch to syncing process at the same time 
if(syncing) { 
    if(handler) { 
     handler(UIBackgroundFetchResultNoData); 
    } 
    return; 
} 

syncing = YES; 

[[VDARSDKController sharedInstance].afterLoadingQueue addOperationWithBlock:^(void) { 
    dispatch_async(dispatch_get_main_queue(), ^(void) { 

     NSArray *tags = nil; 

     // If you need to synchronize with tags, you can add some tags this way: 
     tags = @[ [VDARTagPrior tagWithName:@"BusDev"] ]; 

     //Synchronize the local DB. The old models which are not anymore needed will be automatically deleted. 
     [[VDARRemoteController sharedInstance] syncRemoteModelsAsynchronouslyWithPriors:tags withCompletionBlock:^(id result, NSError *err) { 
      syncing = NO; 
      NSLog(@"PixLive System got the following models: %@",result); 

      if(err) 
       NSLog(@"The system got an error: %@",err); 

      if(handler) { 
       handler(err ? UIBackgroundFetchResultFailed : UIBackgroundFetchResultNewData); 
      } 
     }]; 

    }); 

}]; 
} 
+0

それはブロックです。最も近い「即時」相当額はクロージャーです。 – trojanfoe

答えて

0

この方法のリテラルスウィフト翻訳は次のとおりです。

func sync(handler: ((result: UIBackgroundFetchResult) ->())?) { 

    guard let handler = handler else { 
     return 
    } 

    if syncing { 
     handler(result: .NoData) 
     return 
    } 

    syncing = true 

    VDARSDKController.sharedInstance().afterLoadingQueue.addOperationWithBlock { 
     NSOperationQueue.mainQueue().addOperationWithBlock { 
      let tags = [VDARTagPrior.tagWithName("BusDev")] 
      VDARRemoteController.sharedInstance.syncRemoteModelsAsynchronouslyWithPriors(tags) { [unowned self] result, error in 
       syncing = false 
       NSLog(@"PixLive System got the following models: \(result)"); 

       if let error = error { 
        NSLog(@"The system got an error: \(err)"); 
        handler(result: .Failed) 
       } else { 
        handler(result: .NewData) 
       } 
      } 
     } 
    } 
} 
関連する問題