0

現在、作業中のアプリケーションに Venmo-iOS-SDK を使用しようとしています。SDK は Objective-C ですが、迅速なアプリで使用しようとしています。

補完 obj-c ブロックの構文を迅速に変換するのに問題があります。使いたい機能を実装したサンプルコードを見つけました。

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

私はこれをやってみました

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

しかし、エラーを取得します

「タイプ '([String], withCompletionHandler: (Bool, NSError) -> Void)' の引数リストで 'requestsPermissions を呼び出せません'

これは、ブロックの翻訳方法に問題がありますか? または、他の何か。Venmo-SDK を見ると、obj-C 関数は次のように定義されています。

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

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

1 に答える 1

1

次のように記述できます (完了ハンドラーのパラメーターに型がないことに注意してください)。

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

Swift 2 の構文をもう少し簡潔にするには、-> Voidand 明示的なwithCompletionHandler:パラメーターを省略します。

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

printlnまた、ステートメントを に変更したことを確認する必要がありますprint

于 2015-12-08T07:44:03.817 に答える