问题描述
我已经在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) {}
希望这会有所帮助。