簡體   English   中英

Swift轉換后,Objective-C方法簽名是相同的

[英]Objective-C method signatures are the same after Swift conversion

我在objective-c庫中有兩個方法,在轉換為Swift之后,似乎有相同的方法簽名。 它們在Objective-C中如下:

- (void)doSomething:(UIViewController *)viewController __attribute__((deprecated));
- (BOOL)doSomething:(UIViewController *)viewController error:(NSError **)error;

根據我在Objective-C中使用NSErrors + BOOL返回值的Swift轉換方法的內容,這些方法將最終得到以下Swift方法簽名:

func doSomething(viewController: UIViewController)
func doSomething(viewController: UIViewController) throws

由於在Objective-C中實際上不推薦第一個調用,是否有辦法強制對此方法的調用使用第二個簽名(確保我可以利用拋出的錯誤)?

我試圖以下列方式調用該方法:

do {
    try myObjectInstance.doSomething(self)
} catch let error as NSError {
    print(error)
}

這種方法似乎默認為第一個聲明,它給了我一個警告:a)該方法已被棄用,b)沒有什么可以捕獲的,因為沒有拋出錯誤。

您可以使用NS_SWIFT_UNAVAILABLE宏將其標記為Swift不可用:

- (void)doSomething:(UIViewController *)viewController
   __attribute__((deprecated)) NS_SWIFT_UNAVAILABLE("use the throwing variant");

然后Swift編譯器將選擇唯一可用的方法,即另一個方法。

(在我的測試中,這似乎打破了自動完成 - 你可能想要提交一個關於它的bug 。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM