Создайте функцию Swift с обратным вызовом с параметрами и вызовом из ObjectiveC с автозаполнением

#swift #objective-c #callback

Вопрос:

Я создал функцию в Swift, которую вызываю из Objective C. У него есть обратный вызов с параметрами. Однако он не будет автоматически заполняться именами параметров в обратном вызове. Похоже, что довольно давно метки в функциях больше не разрешены в swift. Отсюда и использование _ для его сборки.

Вот определение моей функции в swift…

 @objc func myFunction (param1: String, success: @escaping ()-gt;(), failure: @escaping (_ error: NSError?)-gt;())  

В Objective-C я могу сделать эту работу, но автозаполнение делает следующее…

 [self.swiftClass myFunction:myParam success:^{    // Yay success!    } failure:^(NSError * _Nullable) {    // NO failure!  }];  

Как вы можете видеть, ошибка NS при сбое не названа/помечена. Как мне сделать так, чтобы он правильно заполнялся автоматически? В противном случае мне придется самому вручную добавить имя параметра. т. е. сбой:^(ошибка NSError * _Nullable).

Комментарии:

1. Есть ли какие-либо другие API-интерфейсы первой партии, о которых вы знаете, которые делают это? Возможно, вы могли бы взглянуть на их заголовки и посмотреть, как они работают

2. Все, что я видел до сих пор во многих поисках переполнения стека и в гугле, похоже, указывает на то, что Swift изменил способ «маркировки» этих параметров и сделал их обязательными, по сути, «необязательными». Кажется, я не могу найти примеры кода, которые гарантировали бы, что метки будут отображаться для моста objective c/swift и, следовательно, автозаполнения. 🙁 Я должен предположить, что это должно быть возможно, иначе это вопиющее упущение.

3. Вы правы, это изменение действительно произошло, но я не помню, чтобы каждый вызов метода Objective C автоматически выполнялся с копированием меток. Это, конечно, может быть так, но у меня нет никаких воспоминаний об этом