簡體   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