Ios SwiftUI:如何处理BLE响应并显示新值
我有一个swift应用程序,可以与小型可编程设备进行通信。我可以发送请求并从设备上获取答案,但我很难更新swiftui视图上显示的值 以下是我尝试过的:Ios SwiftUI:如何处理BLE响应并显示新值,ios,swift,swiftui,bluetooth-lowenergy,Ios,Swift,Swiftui,Bluetooth Lowenergy,我有一个swift应用程序,可以与小型可编程设备进行通信。我可以发送请求并从设备上获取答案,但我很难更新swiftui视图上显示的值 以下是我尝试过的: 通过回调: 在BleConnection.swift文件中,实现了所有BLE内容,我声明了一个回调var onResponse:(([UInt8])->Void)=无 当从设备接收到响应时,通过回调将数据推送到视图: func peripheral(_ peripheral: CBPeripheral, didUpdateValueFo
var onResponse:(([UInt8])->Void)=无
当从设备接收到响应时,通过回调将数据推送到视图:
func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
...
if self.onResponse != nil {
self.onResponse!(characteristic.value!.bytes)
}
}
}
}
在ReaderInformations.swift文件中,有swiftui视图,我实现了回调,并尝试用@State var
更新组件显示值,但没有成功。回调中的print()在控制台中打印良好,但组件未更新。然后我读到只有视图的内部方法才能更新状态变量
let passThroughSubjectPublisher=PassthroughSubject()
func外围设备(uPeripal:CbPeripal,didUpdateValueFor characteristic:CBCharacteristic,error:error?){
...
passThroughSubjectPublisher.send(characteristic.value!.bytes)
}
}
并且认为:
struct ReaderInformations: View {
var ble: BleConnection
@State private var status: String = "status"
private var cancelSet: Set<AnyCancellable> = []
init(bleInstance: BleConnection) {
passThroughSubjectPublisher.sink(receiveValue: { response in. // Escaping closure captures mutating 'self' parameter
switch response[0] {
self.status = "TEST". // This error because of the self
...
}
}).store(in: &cancelSet)
}
结构读取器信息:视图{
变量ble:ble连接
@状态私有变量状态:String=“status”
私有变量cancelSet:Set=[]
初始化(bleInstance:BleConnection){
passThroughSubjectPublisher.sink(receiveValue:{response in//转义闭包捕获变异的'self'参数
开关响应[0]{
self.status=“TEST”。//此错误是由于self
...
}
}).store(在:&cancelSet中)
}
我也不工作,因为我尝试在init中访问一个甚至还没有实例化的成员
所以我现在不知道该怎么做。你们会怎么做呢?将发布者的观察者附加到正文中,就像下面的伪代码一样
struct ReaderInformations: View {
var ble: BleConnection
@State private var status: String = "status"
var body: some View {
VStack { // .. any your view
}
.onReceive(ble.passThroughSubjectPublisher) { response in // << here !!
switch response[0] {
self.status = "TEST"
///...
}
}
}
}
结构读取器信息:视图{
变量ble:ble连接
@状态私有变量状态:String=“status”
var body:一些观点{
VStack{//…任何您的观点
}
.onReceive(ble.passThroughSubjectPublisher){中的响应//
struct ReaderInformations: View {
var ble: BleConnection
@State private var status: String = "status"
var body: some View {
VStack { // .. any your view
}
.onReceive(ble.passThroughSubjectPublisher) { response in // << here !!
switch response[0] {
self.status = "TEST"
///...
}
}
}
}