我在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 中表示
枚举 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
}
}
并声明你的函数:@objc func demoMethod(_ completion: (AResult) -> Void) {}
希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)