2016-03-30 12 views
0

Ich erstelle ein Modul swift Ich wünschte, ich könnte den Code swift konvertieren. Können Sie mir sagen, wofür der Methodendeklarationstyp verwendet wird und wofür er verwendet wird?Was bedeutet diese Syntax in 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

Es ist ein Block. Es ist am nächsten "swift" gleichbedeutend ist eine Schließung. – trojanfoe

Antwort

0

Eine wörtliche Übersetzung Swift dieser Methode ist:

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) 
       } 
      } 
     } 
    } 
}