ios - 使用 Swift 与需要 block 作为参数的 Objective C 方法进行交互

标签 ios swift

我正在尝试编写一些调用现有 Objective C 函数的 Swift 代码。 Objective C 函数如下所示:

+(void) getCurrentUserprofileWithCompletion:(RequestCallback)completion {...}

其中 RequestCallback 在 .h 文件中定义为:

typedef void (^RequestCallback) (ResponseInfo *responseInfo);

我尝试了很多不同的方法,但似乎没有任何效果。对我来说最符合逻辑的代码是:

let callback: (responseInfo: ResponseInfo) -> Void = {(responseInfo: ResponseInfo) -> Void in
    if let organization: Organizations = Organizations.organizationWithId(orgId) {
        completionBlock(false, nil)
    } else {
        self.switchOrganization(user, organization: organization, completionBlock: completionBlock)
    }
}
Users.getCurrentUserprofileWithCompletion(callback)

但是出现错误

cannot convert value of type '(responseInfo: ResponseInfo) -> Void' to expected argument type 'RequestCallback!'

有人知道我在这里做错了什么吗?我在互联网上搜索寻求帮助,包括各种苹果文档,但要么是我瞎了,要么是误读了,因为似乎没有任何效果。

提前致谢!

最佳答案

只需删除 responseInfo 的类型规范并使用 RequestCallback 类型

let callback: RequestCallback = { responseInfo -> Void in
    if let organization: Organizations = Organizations.organizationWithId(orgId) {
        completionBlock(false, nil)
    } else {
        self.switchOrganization(user, organization: organization, completionBlock: completionBlock)
    }
}

Users.getCurrentUserprofileWithCompletion(callback)

关于ios - 使用 Swift 与需要 block 作为参数的 Objective C 方法进行交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34187735/

相关文章:

ios - 使用SK3DNode在SpriteKit中显示SceneKit粒子对象

ios - 如何删除添加到特定相册但不添加到其他相册的照片?

iphone - 在 Interface Builder 中使用自定义字体定位 UILabel

iphone - 在iOS应用中关闭ARC的效果

ios - 从未调用过 PFFacebookUtils loginWithPermissions block

xcode - 由于 Google Analytics,AppDelegate 中的链接器命令失败错误

swift - 访问外部作用域中的变量

swift - 在发布构建期间运行 Xcode 单元测试

ios - 以编程方式为循环加载动画的 UILabel 添加约束

ios - 查找searBar.text是否包含整数字符串?