Почему я не могу получить доступ к сервисам в RxBluetoothKit? - PullRequest
0 голосов
/ 06 апреля 2020

Я подключился к bluetooth, используя RxBluetoothKit, используя этот код:

instance.bleScan()
    .flatMap{ Observable.from($0)}
    .do(onNext: {
        if let name = $0.peripheral.name {
            print("?name:", name)
            print("?id:", $0.peripheral.identifier)
            print("?isconnected:", $0.peripheral.isConnected)
        }
    })
    .flatMap{ self.instance.bleEstablishConnection(scannedPeripheral: $0)}
    .subscribe(onNext: {
        print("subscribe", $0)
    }
    ).disposed(by: disposeBag)

Он распечатывает имя и идентификатор ближайших bluetooth устройств, поэтому, похоже, он работает. Но есть несколько вещей, которые мне не подходят:

1) Как я узнаю, что соединение установлено? Существует property под названием isConnected. Могу ли я использовать это где-нибудь, чтобы проверить соединение. Кроме того, что именно означает быть подключенным к peripheral? Означает ли это, что я могу регулировать громкость наушников Bluetooth, если я подключен к нему, или это просто означает, что я установил связь между ними?

2) Следующий шаг - поиск services и characteristics из peripheral.

Я хотел бы добавить .flatMap { $0.discoverServices(nil) }.asObservable() после self.instance.bleEstablishConnection(scannedPeripheral: $0) следующим образом:

.flatMap{ 
    self.instance.bleEstablishConnection(scannedPeripheral: $0)
        .flatMap { $0.discoverServices(nil) }.asObservable()
}...

Но он говорит мне, что

Невозможно преобразовать значение типа ' [BleHandler.BlePeripheral] 'для ожидаемого типа аргумента' BleHandler.BlePeripheral '

Для меня это означает, что мне нужно использовать:

.flatMap{ self.instance.bleEstablishConnection(scannedPeripheral: $0).flatMap { Observable.from($0)}

Но я получаю ту же ошибку. Как мне получить от array до element´? and then find the service`?

...