swift中CBUUID和NSUUID的区别

Posted

技术标签:

【中文标题】swift中CBUUID和NSUUID的区别【英文标题】:Differences between CBUUID and NSUUID in swift 【发布时间】:2015-09-23 20:48:01 【问题描述】:

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 组成 对此我很抱歉!你完全正确。 【参考方案1】:

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

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

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

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

使用 Core Bluetooth 时,您将使用 CBUUID 来表示服务和特性。 NSUUID 用于外设标识符,因为它只是一个没有定义特殊值的 MAC。

【讨论】:

好的,所以如果我使用自定义结构的服务和特征以及免费创建的 UUID,我应该使用 NSUUID 编号还是?因为在这种情况下,我不必将短的 16 位 UUID 转换为 128 位 UUID。但是在这种情况下,我是否必须注意扫描方法的预期输入类型?谢谢! 不,您应该使用 CBUUID。 CBUUID 初始化程序将处理 16 位或 128 位值。您会发现所有 Core 蓝牙功能现在都使用 CBUUID。有一个 CBUUID 的初始化程序,如果你有一个 NSUUID 的话。 很抱歉在这个领域提出以下问题,但我没有足够的声誉来评论你的另一个答案......所以我想知道两件事:1.为什么Apple设备会改变他们的UUID定期?这个问题是指您在该领域的回答:***.com/questions/22778273/… 2. 当我只想搜索一个特定的 UUID 时,我是否可以将 scanforPeripheralsWithServices 中的选项从 nil 替换为例如外围设备标识符?或者我必须在那里设置哪个 UUID?谢谢! 换句话说,我从 peripheral.identifier 得到什么 UUID? :) 这是一个 NSUUID,因为它只是一个 MAC 地址,并且没有众所周知的 16 位值

以上是关于swift中CBUUID和NSUUID的区别的主要内容,如果未能解决你的问题,请参考以下文章

将NSUUID转换为UnsafePointer

swift中的protocol和OC中protocol的区别

swift里nsdictionary和dictionary有啥区别

Swift 中 println 和 print 的区别

Swift 闭包 与 OC block区别

Swift 中“static var”和“var”的区别