簡體   English   中英

Swift橋接方法調用錯誤

[英]Swift bridging method call bug

Objective-C方法

typedef void(^CompletionHandler)(NSError *error);
- (void)openWithCompletionHandler:(CompletionHandler)completionHandler authType:(AuthType)authType, ...;

我試圖將目標C代碼轉換為Swift代碼。

我試過了 :

test().openWithCompletionHandler({ (NSError) -> Void in
            }, AuthType.Test)

但這是代碼“調用中的額外參數”編譯錯誤。

我該怎么辦?

Swift不會將Objective-C方法與可變參數*( ... )橋接在一起,因此您聲明的openWithCompletionHandler(:authType :)方法根本不會在Swift中顯示。

從收到的錯誤消息中,我可以看出test()返回的是AnyObject ,Swift很高興可以調用任何Objective-C方法。 UIDocument有一個openWithCompletionHandler()方法,該方法將單個閉包作為唯一參數,因此Swift抱怨說您為該方法提供了太多參數(即使它不是您想要的)。 足夠清楚嗎?

如果可能的話,您需要將Objective-C方法重構為Swift可以理解的方法。


*請注意,這並非完全正確NSArray initWithObjects:方法通過可變參數連接到Swift初始化程序,但是Apple似乎在做一些非公開的事情來使它起作用-類似於它們能夠澄清的方式參數和返回值是否應該是可選的。

暫無
暫無

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

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