繁体   English   中英

Swift中使用的Objective-C框架——方法错误的歧义使用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM