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());

Я думаю, что стоит упомянуть, хотя в вашем случае это точно не решит вашу проблему, потому что вы не владеете кодом.

Другие вопросы по тегам