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