如何在 Objective-C 中访问 swift 5 结果枚举类型

she*_*ath 4 objective-c ios swift5

我在swift-5中编写了一个类方法,其参数为Result类型,现在我想在objective-c中使用这个方法,可以吗?如果是,怎么办?

@objc public class DemoClass :NSObject {

    @objc public func demoMethod(completion: @escaping (Result<UIImage,Error>) -> 
     Void) {
             //some codes
      }
}
Run Code Online (Sandbox Code Playgroud)

一旦我将@objc添加到方法中,它就会抛出错误:方法无法标记为@objc,因为参数的类型无法在Objective-C中表示

Kou*_*udi 5

枚举 Result 在 Objective-C 中无法访问。它是@frozen又不是@inlinable

而且 Objective-C 枚举不能是泛型的,即Result<Success, Failure> where Failure: Error不能暴露给 Objective-C。

因此,您能做的就是按如下方式创建一个类,并根据需要执行其他操作:

@objc class AResult: NSObject {
    
    public private(set) var success: Any?
    public private(set) var failure: Error?
    
    private override init() {
        super.init()
        success = nil
        failure = nil
    }
    
    public convenience init<Success, Failure>(_ arg1: Success, _ arg2: Failure) where Failure: Error {
        self.init()
        success = arg1
        failure = arg2
        // Do something
    }
}
Run Code Online (Sandbox Code Playgroud)

并声明你的函数:@objc func demoMethod(_ completion: (AResult) -> Void) {}

希望这可以帮助。