在Swift中,CBUUID和NSUUID有何不同?

9
CBUUID和NSUUID对象之间有什么区别?
我已经看到在不同情况下使用这两种对象填充scanForPeripheralsWithServices... Apple期望一个CBUUID对象,因此我更喜欢使用这种类型,对吗?
我的例子: let MY_SERVICE_UUID = CBUUID(string: "hdl83h6sd-gl95-bn4f-37gd-jd73hd0tn8za") func scanForPeripheralsWithServices(serviceUUIDs: MY_SERVICE_UUID,nil)

您的cbuuid示例无效 - 它必须由十六进制数字0-9 a-f组成。 - Paulw11
非常抱歉!你是完全正确的。 - user5357137
1个回答

16

NSUUID是一个128位的数字,用于唯一识别对象、类型和其他项目。它可以作为字节访问,也通常以字符串形式表示 - 68753A44-4D6F-1226-9C60-0050E4C00067。该类包括创建随机UUID和使用专门值初始化实例的方法。

蓝牙还使用128位标识符来表示特征和服务。蓝牙SIG定义了许多“众所周知”的服务和特征。这些被表示为16位值,与蓝牙基本UUID结合以获取完整的128位值。

CBUUID方法知道这些众所周知的值,并且可以自动将16位值转换为其128位等效值。如果您没有使用众所周知的值(即您创建了自己的私有服务和特征),CBUUID也可以使用128位值进行初始化。

例如,使用CBUUID(string:"180F")初始化CBUUID是可以的(这是电池服务),但使用NSUUID(string:"180F")会失败,因为它需要所有128位。

在使用Core Bluetooth时,您将使用CBUUID来处理服务和特征。NSUUID用于外围设备标识符,因为它只是MAC地址没有定义任何特殊值。


好的,如果我使用自定义的服务和特征结构,并且使用自由创建的UUID,那么我应该使用NSUUID号码吗?因为在这种情况下,我不必将短的16位UUID转换为128位UUID。但是,在这种情况下,我是否需要注意扫描方法的预期输入类型?谢谢! - user5357137
很抱歉在这个区域问下面的问题,但我没有足够的声望来评论你的另一个答案...所以我想知道两件事:1.为什么苹果设备会定期更改它们的UUID?这个问题是指您在这个领域的回答:http://stackoverflow.com/questions/22778273/how-to-find-the-specific-ble-4-0-peripheral-from-two-devices-with-same-service-u 2.当我只想搜索一个特定的UUID时,我是否应该将scanforPeripheralsWithServices中的选项从nil替换为例如peripheral.identifier?或者我必须在那里设置哪个UUID?谢谢! - user5357137
换句话说,我从peripheral.identifier获取什么UUID? :) - user5357137
1
这是一个NSUUID,因为它只是一个MAC地址,没有已知的16位值。 - Paulw11
您可以扫描16位或128位服务,但这与外围设备标识符不同。标识符是硬件地址,而服务是它所广告的内容。例如,所有心率监测器都将广告心率服务,但每个监测器在硬件级别上具有不同的唯一标识符。 - Paulw11
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接