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

问题描述

我已经在swift-5中用参数Result类型编写了一个方法,现在我想在Objective-c中使用此方法,这可能吗?如果是,怎么办?

@objc public class DemoClass :NSObject {

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

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

解决方法

枚举结果在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
    }
}

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

希望这会有所帮助。