2016-03-30 121 views
0

我正在創建一個模塊swift,我希望我可以將代碼迅速轉換。你能告訴我什麼是使用的方法聲明類型以及它的用途?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) 
       } 
      } 
     } 
    } 
}