gpt4 book ai didi

swift - 特性的 flatMap writeValue 不返回 Observable

转载 作者:行者123 更新时间:2023-11-30 12:24:24 25 4
gpt4 key购买 nike

更新:我刚刚检查了他们的示例项目,它是相同的。因此,这可能是一个错误,或者这是预期的行为。

我正在使用 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>我的假设是它会给我返回书面值(value)。但事实并非如此,或者至少对我来说不起作用。它给了我以前的值或零,到目前为止我无法弄清楚发出的 Observable<Characteristic> 的逻辑是什么。 。如果我能拿回书面值(value),那就太好了。我做错了什么?

我什至尝试了更长的方法,github 上提到了这个:

characteristic.writeValue(data, type: .withResponse)
.subscribe { event in
//respond to errors / successful read
}

发出的特征(在 onNext: 回调中)不是我写入设备的特征。它是前一项或零。有趣的是,如果我尝试读回它,然后再写,characteristic.value 将是我用 $0.readValue 读取的值。 。但如果我重新编译,写一个全新的,它仍然是我以前读过的。就像 RxBluetoothKit 缓存了一个值,或者我什么都不知道。

这可能是 ble 设备的问题吗?也许这是一个线程问题或类似的问题?

我真的很感激任何建议或提示。

谢谢

丹尼尔

最佳答案

很抱歉没有回复,我刚刚注意到这一点。您的问题还出现吗?如果是这样 - 请在我们的 Github 上写一个问题。它与核心蓝牙本身的工作方式有关,我们也许应该改进我们的文档,因此最好将其作为一个问题。您应该做的是再次读取该值 - 然后它将显示正确的值。

关于swift - 特性的 flatMap writeValue 不返回 Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44371609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com