我有以下Swift方法:
public func login(userLogin: String, userPassword: String, completion:@escaping (_ result: Result<Data, PZError>) -> ())
我想从Objective-C中调用它,但无法弄清楚闭包部分:
[apiController loginWithUserLogin:userLogin userPassword:password completion:???];
我的完成代码在Objective-C中会是什么样子?
答案 0 :(得分:1)
不可能直接从Objective-C调用这样的方法。
如果你的结果类型是一个包含非平凡的枚举&#34; case&#34;对象或结构,它不会起作用,因为Objective-C不支持值类型。
Objective-C也不支持Result<T>
等通用类型。
修复的一种方法是创建一个包装器,即在Swift中编写第二个适应类型的方法:
func login(userLogin: String, userPassword: String,
completion: @escaping (_ resultData: Data?, _ resultError: NSError?) -> Void)
在此方法中,您将调用原始登录名,并在内部完成回调中将结果解包为数据和NSError(从PZError转换),并传递调用方的完成块。