Почему Swift Arblement Lables Matter для BLE Callback - PullRequest
0 голосов
/ 30 мая 2018

Я работаю над своим первым приложением Swift / BLE и заметил, что если метки аргументов для обратного вызова центрального менеджера не совпадают или используется «_», обратный вызов никогда не запускается.Будучи новичком в Swift, у меня сложилось впечатление, что метки предназначены только для удобства чтения, но, очевидно, они используются для сопоставления обратных вызовов функций.Это точно?

Это работает:

 // Called when disconnected from BLE device
func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?)

Но удаление или изменение "didDisconnectPeripheral" на "didDisconnect" или "_" предотвращает повторный вызов.

1 Ответ

0 голосов
/ 30 мая 2018

Функция centralManager(_:didDisconnectPeripheral:error:) - это необязательный метод протокола CBCentralManagerDelegate, означающий, что вы не получите сообщение об ошибке, если не реализуете его при соответствии протоколу.Однако метки аргументов являются частью сигнатуры функции, поэтому удаление их делает функцию отличной от метода протокола, и поэтому протокол не будет вызываться протоколом, если вы объявите его, используя неверные метки / имена аргументов.

Однако вы должны получить предупреждение о том, что Instance method 'centralManager(central:didDisconnectPeripheral:error:)' nearly matches optional requirement 'centralManager(_:didDisconnectPeripheral:error:)' of protocol 'CBCentralManagerDelegate', если вы измените объявление функции на то, что не соответствует объявлению в протоколе.

...