[英]Objective-C framework used in Swift - ambiguous use of method error
我有一个 Objective-C 框架,其中我弃用了一种方法并将其替换为另一种方法:
+ (void)methodName:(BOOL)value; + (void)MethodName:(BOOL)value __attribute__((deprecated("from version 2.0 - use 'methodName'")));
这在使用该框架的 Objective-C 项目中运行良好,但是当我尝试在 Swift 项目中调用该方法时,出现以下错误:
AppDelegate.swift:21:3: 'methodName' 的用法不明确
(双击!发现这个候选行没有去任何地方)
问题似乎是方法名称自动转换为 Swift 与仅将第一个字母更改为小写有冲突。
有什么方法可以将已弃用的方法包装在 #if OBJECTIVE_C 类型编译指示中,以便 Swift 模块仅暴露于该方法的一个(较新)版本?
或者另一种解决自动翻译的方法?
两种 Objective-C 方法都被导入到 Swift 中
open class func methodName(_ value: Bool)
这导致了歧义。
如果不推荐使用的方法在 Swift 中根本不可用,那么您可以使用NS_SWIFT_UNAVAILABLE
对其进行NS_SWIFT_UNAVAILABLE
:
+ (void)methodName:(BOOL)value;
+ (void)MethodName:(BOOL)value __attribute__((deprecated("from version 2.0 - use 'methodName'")))
NS_SWIFT_UNAVAILABLE("deprecated method not available in Swift");
另一种选择是使用NS_SWIFT_NAME
注释已弃用的方法:
+ (void)methodName:(BOOL)value;
+ (void)MethodName:(BOOL)value __attribute__((deprecated("from version 2.0 - use 'methodName'")))
NS_SWIFT_NAME(oldMethodName(_:));
以便将其导入 Swift 作为
open class func methodName(_ value: Bool)
@available(*, deprecated, message: "from version 2.0 - use 'methodName'")
open class func oldMethodName(_ value: Bool)
看
想要查询更多的信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.