【发布时间】:2020-12-14 00:11:46
【问题描述】:
我在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<UIImage, Error>) 不能在 Objective-C 中表示”。所以不,您不能从 Objective-C 访问它,因为它在那里无法表示。你可以做的是,(UIImage?, Error?) -> Void就像许多 Objective-C API 一样。 -
这是我要做的最后一件事,最初,我想尽可能用最少的代码扩展/继承 Result 顶部的枚举,然后在 swift 中使用它并在 Objective-C 中访问
-
你不能,这是我对一个问题(基于意见)的评论,询问作者是否需要删除其所有先前的完成闭包并用 Result 替换它们。您可以为 Objective-C 使用“旧版”方法,但这会添加您的代码,例如带有
(UIImage?, Error?) -> Void的代码,并在内部调用带有Result的代码。
标签: ios objective-c swift5