flatMap writeValue的特点不返回可观察
更新:我只是检查他们的榜样项目和它是一样的。所以,这可能是一个错误,或者这是预期的行为。flatMap writeValue的特点不返回可观察
我使用RxBluetoothKit并不能弄清楚以下问题。我有这个包装函数写一个特性(我想写很多都与CONCAT,它的工作原理很漂亮):
func writeCharacteristicData(for peripheral: Peripheral, characteristicIdentifier: CharacteristicIdentifier, value: Data?) -> Observable<Characteristic> {
guard let value = value else {
return Observable.error(BTError.noDataProvided(description: "Missing value for: \(characteristicIdentifier)"))
}
return peripheral
.connect()
.flatMap { $0.writeValue(value,
for: characteristicIdentifier,
type: .withResponse) }
}
根据RxBluetoothKit文档.flatMap { $0.writeValue }
是写在最简单的方法之一一个特点。其实它只是与readValue
,甚至与这个writeValue
罚款,写成功,如果我以后有readValue读回,在characteristic.value
是oNext:
确定。
我的问题是,这个函数返回一个Observable<Characteristic>
和我的假设是,它会给我回写入值。但事实并非如此,或者至少它不适合我。它给了我以前的值或零,我不知道到目前为止,发射的Observable<Characteristic>
逻辑是什么。如果我能取回书面价值,这将是非常好的。我究竟做错了什么?
我甚至试图越长的方式,而这一次,在github提到:
characteristic.writeValue(data, type: .withResponse)
.subscribe { event in
//respond to errors/successful read
}
所发射特性(在onNext:
回调)不是一个我写到该设备。这是前一个或零。有趣的是,如果我试图读回来,然后写,特性值将是我已阅读$0.readValue
。但如果我重新编译,写一个全新的,它仍然是我以前读过的。这就像RxBluetoothKit缓存了一个值,或者我不知道。
可这是与BLE装置出了问题? 也许这是一个线程问题或类似的东西?
我真的很感激任何建议或暗示的。
感谢,
丹尼尔
对不起,我毫无反应,我刚刚注意到这一点。你的问题是否仍然存在?如果是这样 - 请在我们的Github上写一个问题。它与Core Bluetooth本身的工作方式有关,我们也许应该改进我们的文档,所以最好将它作为一个问题。你应该做的是再次读取值 - 它会显示正确的值。