我有以下 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/