将UUID转换为字符串表示形式,例如:将1816转换为骑行速度和节奏

问题描述

我正在通过蓝牙连接到Cycled Speed and Cadence服务,并将外围设备保存到一个数组中(用于表视图)。

我已经实现了这个结构

struct BTPeripheral: Identifiable {
    let id: Int
    let name: String
    let uuid: UUID
    let desc: String
}

我打电话给

discoveredBTDevices.append(BTPeripheral.init(
                           id: discoveredBTDevices.count,name: peripheral.name!,uuid: peripheral.identifier,desc: service.uuid.uuidstring) // trying service.uuid results in error
)

这将导致输出

id: 0,name: "Wahoo CADENCE 1DE8",uuid: E98F3843-1C6A-E4DE-6EF3-76B013950007,desc: "1816"

描述是字符串1816(这是Speed&Cad服务周期的UUID)

let serviceCyclingSpeedAndCadenceUUID             = CBUUID(string: "1816")

如何将1816转换为打印出来的字符串“ Cycling Speed and Cadence”

print(service.uuid) // this results in "cycling Speed and Cadence"

如上所述,放置service.uuid会导致错误Cannot convert value of type 'CBUUID' to expected argument type 'String'

解决方法

您只需获得其description(IIRC就是print最终将要执行的操作,因为CBUUID符合CustomStringConvertible):

service.uuid.description

或使用字符串插值:

"\(service.uuid)"

debugDescription也会产生相同的结果,但是除非实际用于调试,否则我不会使用它。