2016-10-03 118 views
1

在Swift 3.0中,由於「省略不必要的單詞」規則導致的函數名稱的自動更改已導致ObjC類中的兩個函數相同。Swift 3(Omit Needless Words)導致兩個函數具有相同的名稱

- (void)showLoader; 

......還有......

- (void)show __deprecated_msg("User 'showLoader'"); 

的問題是,這些功能是第三方可可豆莢(否則,我只想刪除不必要的「顯示」功能)內。

這導致得到錯誤「不明確使用‘秀’」當我嘗試調用這樣的功能:

loader?.show() 

有沒有辦法扭轉的函數名自動改變雨燕3.0或者幫助編譯器知道我想調用哪個函數?

感謝您的幫助!

回答

1

您可以解決此通過調用

loader?.perform(Selector("showLoader")) 

你會看到從編譯器警告,但它會成功編譯,事情會在運行時正常工作。

+1

並請提交Apple的錯誤報告。不幸的是,「renamification」列車已經離開車站。在我看來,他們沒有給這個「功能」在任何地方靠近足夠的想法之前,放鬆它在世界上...... – matt

+1

和文件與您的第三方cocoapod問題,或者,甚至更好,去解決它,並給他們發送公關。 –

+1

非常好的一點,@i_am_jorf,但它幾乎不是一些無辜的Objective-C編碼器的錯,Swift現在獨白地認爲兩個完全不同的Objective-C方法是同一個。 – matt

2

見MartinR的回答讓我類似的問題在這裏:Converting to Swift 3 renamed my own Objective-C method

如果你擁有的代碼,你可以使用NS_SWIFT_NAME(showLoader())你的方法聲明之後促使ObjC到斯威夫特方法轉換被命名爲你想要的東西:

- (void)showLoader NS_SWIFT_NAME(showLoader()); 

我認爲值得一提的是,即使在您的情況下,它並不能完全解決您的問題,因爲您不擁有代碼。

+0

我不知道這個宏,像一個魅力!應該是我認爲的接受答案^^謝謝Ethan – polo987

相關問題