#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 автоматически выполнялся с копированием меток. Это, конечно, может быть так, но у меня нет никаких воспоминаний об этом