objective-c - 如何使用 Objective-c 的闭包调用 Swift 方法?

标签 objective-c swift

我有以下 Swift 方法:

public func login(userLogin: String, userPassword: String, completion:@escaping (_ result: Result<Data, PZError>) -> ())

我想从 Objective-C 中调用它,但无法弄清楚闭包部分:

[apiController loginWithUserLogin:userLogin userPassword:password completion:???];

在 Objective-C 中我的完成代码会是什么样子?

最佳答案

不可能直接从 Objective-C 调用这样的方法。

如果您的结果类型是具有非平凡“case”对象或结构的枚举,它将无法工作,因为 Objective-C 不支持值类型。 此外,Objective-C 不支持像 Result<T> 这样的泛型类型。 .

一种解决方法是制作一个包装器,即在 Swift 中编写第二个方法来适应类型:

func login(userLogin: String, userPassword: String,
    completion: @escaping (_ resultData: Data?, _ resultError: NSError?) -> Void)

在此方法中,您将调用您的原始登录,并在内部完成回调中将您的结果解包为 Data 和 NSError(从 PZError 转换),并将它们传递给调用者的完成 block 。

关于objective-c - 如何使用 Objective-c 的闭包调用 Swift 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50725821/

相关文章:

ios - 创建一个相对于设备定位并面向真实世界航向的 SCNNode

swift - 如何计算在 iOS 的 CollectionView 中调用 indexpath 的次数?

ios - 如何在 Unity 导出的 iOS App 中使用 Swift Pod

java - Xcode 4.5.1 : Linker Error: NSJavaVirtualMachine, 找不到体系结构 i386 的符号

iphone - 消除模态视图层次结构——一个优雅的解决方案

swift - 从核心数据中删除项目

ios - 如何获取单元格的页脚单元格中的总数?

swift - NSCalendar 的 calendar.rangeOfUnit 函数中的错误?

ios - Xcode 内存调试器显示已删除对象的实例 - iOS

ios - 如何只允许在场景中的特定区域进行触摸?