2015-12-08 1 views
0

J'essaie actuellement d'utiliser le Venmo-iOS-SDK pour une application sur laquelle je travaille. Le SDK est dans l'objectif-C, alors que j'essaie de l'utiliser avec une application rapide.Syntaxe du bloc Swift avec fonction Objective-C [Venmo-iOS-SDK]

Je n'arrive pas à traduire la syntaxe d'un bloc obj-c d'achèvement en swift. J'ai trouvé un exemple de code implémentant une fonction que je veux utiliser.

- (IBAction)logInButtonAction:(id)sender { 
    [[Venmo sharedInstance] requestPermissions:@[VENPermissionMakePayments, 
              VENPermissionAccessProfile] 
        withCompletionHandler:^(BOOL success, NSError *error) { 
         if (success) { 
          NSLog("Success") 
         } else { 
          NSLog("Failure") 
        } 
}]; 
} 

J'ai essayé de faire ce

@IBAction func loginButtonAction(sender: AnyObject){ 
    Venmo.sharedInstance().requestPermissions([VENPermissionMakePayments, VENPermissionAccessPhone], withCompletionHandler: { (success: Bool, error: NSErrorPointer) -> Void in 
     if success{ 
      println("Yes") 
     }else{ 
      println("No") 
     } 
    }) 
} 

Mais obtenir l'erreur

« ne peut invoquer 'requestsPermissions avec une liste d'arguments de type ' ([chaîne], withCompletionHandler: (Bool, NSError) -> Void) '

Est-ce un problème avec la façon dont je traduis le bloc? Ou autre chose. En regardant le Venmo-SDK les fonctions Obj-C sont définies comme celui-ci

- (void)requestPermissions:(NSArray *)permissions withCompletionHandler:(VENOAuthCompletionHandler)handler; 

et

- (void)requestPermissions:(NSArray *)permissions withCompletionHandler:(VENOAuthCompletionHandler)handler; 

Répondre

1

Vous pouvez l'écrire comme ceci (notez l'absence de types sur le gestionnaire achèvement params):

@IBAction func loginButtonAction(sender: AnyObject) { 
    Venmo.sharedInstance().requestPermissions([VENPermissionMakePayments, VENPermissionAccessPhone], withCompletionHandler: { (success, error) -> Void in 
     // code here 
    }) 
} 

Un peu plus concis avec Swift 2 syntaxe serait le paramètre -> Void omettre et withCompletionHandler: explicite:

@IBAction func loginButtonAction(sender: AnyObject) { 
    Venmo.sharedInstance().requestPermissions([VENPermissionMakePayments, VENPermissionAccessPhone]) { (success, error) in 
     // code here 
    } 
} 

Vous aurez également besoin de vous assurer que vous changer vos println déclarations print.

+0

Cela a fonctionné merci !! – user3011685