Swift 3 (опустить ненужные слова), в результате чего две функции имеют одинаковое имя
В Swift 3.0 автоматическое изменение имен функций из-за правила "Пропустить ненужные слова" привело к тому, что две функции в классе ObjC были одинаковыми.
- (void)showLoader;
...а также...
- (void)show __deprecated_msg("User 'showLoader'");
Проблема в том, что эти функции находятся в стороннем Cocoa Pod (в противном случае я просто удалил бы ненужную функцию 'show').
Это приводит к ошибке "Неоднозначное использование 'show'", когда я пытаюсь вызвать функцию следующим образом:
loader?.show()
Есть ли способ отменить автоматическое изменение имени функции в Swift 3.0 или помочь компилятору узнать, какую функцию я хочу вызвать?
Спасибо за вашу помощь!
2 ответа
Вы можете обойти это, позвонив
loader?.perform(Selector("showLoader"))
Вы увидите предупреждение от компилятора, но он успешно скомпилируется, и все будет работать правильно во время выполнения.
См. Ответ MartinR на мой похожий вопрос: переход на Swift 3 переименован в мой собственный метод Objective-C
Если бы вы владели кодом, вы могли бы использовать NS_SWIFT_NAME(showLoader())
после объявления вашего метода, чтобы преобразование метода ObjC-to-Swift получило имя, которое вы хотите:
- (void)showLoader NS_SWIFT_NAME(showLoader());
Я думаю, что стоит упомянуть, хотя в вашем случае это точно не решит вашу проблему, потому что вы не владеете кодом.