代码之家  ›  专栏  ›  技术社区  ›  Kamilski81

如何调用带有objective-c闭包的swift方法?

  •  0
  • Kamilski81  · 技术社区  · 7 年前

    我有以下快速方法:

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

    我想从objective-c调用它,但无法计算结束部分:

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

    我的完成代码在objective-c中是什么样子的?

    1 回复  |  直到 7 年前
        1
  •  1
  •   battlmonstr    7 年前

    直接从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转换),并向它们传递调用方的完成块。