ios - 带有 Objective-C 函数的 Swift block 语法 [Venmo-iOS-SDK]

标签 ios swift objective-c-blocks venmo

我目前正在尝试将 Venmo-iOS-SDK 用于我正在开发的应用程序。 SDK 在 objective-C 中,而我正在尝试将它与 swift 应用程序一起使用。

我在将完成 obj-c block 的语法转换为 swift 时遇到问题。我找到了实现我想使用的功能的示例代码。

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

但是报错

"Cannot invoke 'requestsPermissions with an argument list of type '([String], withCompletionHandler: (Bool, NSError) -> Void)'

这是我翻译 block 的问题吗?或者是其他东西。查看 Venmo-SDK,obj-C 函数定义如下

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

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

最佳答案

你可以这样写(注意完成处理程序参数中缺少类型):

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

使用 Swift 2 语法更简洁一点是省略 -> Void 和显式 withCompletionHandler: 参数:

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

您还需要确保将 println 语句更改为 print

关于ios - 带有 Objective-C 函数的 Swift block 语法 [Venmo-iOS-SDK],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34149855/

相关文章:

objective-c - 将 Swift 2 闭包转换为 Objective-C block

objective-c - block , self ,保留循环

objective-c - 非 ARC block ,内存泄漏问题

ios - 如果我的应用程序在整个运行时都使用它,它应该如何处理当前日期?

iphone - iOS : Getting FriendList along with respective name, 使用 FBGraph API 的 id 和图片

swift - 在 swift 中使用 RegExp 降低浮点精度

ios - 无法分配给属性 'tabBarController' 是仅获取属性

ios - 应用被拒绝 - 应用内购买 - 需要开发者操作

ios - swift ; scrollView 搭配 tableView 可行吗?

ios - 如何在 Swift 项目中编译 MagicalRecord?