0

我正在开发一个应用程序,该应用程序需要从 ble 设备获取数据以显示在应用程序上,为了从 ble 设备获取数据,我必须编写某些命令,如 NUM_QUEUE、READ_ALL 等。所以我卡在这里一起执行所有命令,我做什么我是否将所有命令分配到一个数组中,并通过获取每个命令在循环中执行写入函数,但是当我读取值时,我只得到了数组中最后一个命令的值。请帮我读取所有命令的所有值,有什么在数组中写入命令时出错。请帮助。

这是我要写的代码

 func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {

        if let characterArray = service.characteristics as [CBCharacteristic]? {
            for cc in characterArray {
                myCharacteristic = cc 
                peripheral.readValue(for: cc) 
                peripheral.setNotifyValue(true, for: myCharacteristic)
                writeValue()
            }
        }
    }  
func writeValue() {

        if isMyPeripheralConected { //check if myPeripheral is connected to send data
            let arrayCommands = ["NUM_QUEUE\r","READ_ALL\r"]
            for i in 0...arrayCommands.count-1 {
                let dataToSend: Data = arrayCommands[i].data(using: String.Encoding.utf8)!
                myBluetoothPeripheral.writeValue(dataToSend, for: myCharacteristic, type: CBCharacteristicWriteType.withResponse)
            }
           
        } else {
            print("Not connected")
        }
        
    }
4

2 回答 2

0

创建一个具有String原始值类型并遵循CaseIterable协议的枚举。这允许您使用枚举命令BluetoothCommand.allCases.forEach

我还通过使用匿名参数稍微简化了您的代码$0,在这种情况下,该参数将对应于您的每个枚举案例。我也缩短String.Encoding.utf8为只是.utf8因为我相信编译器可以推断出它的类型。

enum BluetoothCommand: String, CaseIterable {
    case numQueue = "NUM_QUEUE\r"
    case readAll = "READ_ALL\r"
}

func writeValue() {

    if isMyPeripheralConected { //check if myPeripheral is connected to send data
        BluetoothCommand.allCases.forEach {
            let dataToSend: Data = $0.rawValue.data(using: .utf8)!
            myBluetoothPeripheral.writeValue(dataToSend, for: myCharacteristic, type: .withResponse)
        }

    } else {
        print("Not connected")
    }

}
于 2020-06-26T21:10:18.117 回答
0

我将enum用于将所有命令放在一起。像这样:

enum Command: String {

case NUM_QUEUE = "..."
case READ_ALL  = "..."

这样你也可以得到rawValue,如果你需要它。

于 2020-06-25T12:53:04.517 回答