根据CLBeaconRegion
的{{3}},仍然可以将peripheralDataWithMeasuredPower:
方法的输出传递给startAdvertising:
的{{1}}方法。
获取Beacon广告数据
CLPeripheralManager
检索可用于将当前设备宣传为信标的数据。
声明
SWIFT
- peripheralDataWithMeasuredPower:
目的-C
func peripheralDataWithMeasuredPower(_measuredPower: NSNumber?) -> NSMutableDictionary
参数
- (NSMutableDictionary<NSString *,id> * _Nonnull)peripheralDataWithMeasuredPower:(NSNumber * _Nullable)measuredPower
设备的接收信号强度指示器(RSSI)值(以分贝为单位)。 该值表示从一个信号测量的信标强度 米距离,在测距期间使用。指定measuredPower
以使用默认值 设备的价值。返回值
您可以使用的数据字典 与
nil
结合使用来宣传当前 设备作为灯塔。讨论
返回的字典对信标的识别进行编码 信息以及宣传该信息所需的其他信息 灯塔。您不应该访问字典内容 直。将字典传递给a的
CBPeripheralManager
方法startAdvertising:
开始宣传信标。可用性
适用于iOS 7.0及更高版本。
但是,CBPeripheralManager
会返回peripheralDataWithMeasuredPower:
,而NSMutableDictionary
的{{1}}方法会接受startAdvertising:
的Swift词典,尽管文档认为它接受了CLPeripheralManager
。以下代码在Swift 1.0中起作用:
[String : AnyObject]?
在Swift 2.0中,相同的代码无法编译并发出警告: 无法编译,并发出警告:
NSDictionary
无法转换为// Set up a beacon region with the UUID, Major and Minor values let region = CLBeaconRegion(proximityUUID:beaconUUID!, major:withMajor.unsignedShortValue, minor:withMinor.unsignedShortValue, identifier:"com.example.beacon") // Attempt to set up a peripheral with the measured power let peripheralData = region.peripheralDataWithMeasuredPower(withPower) _peripheralManager!.startAdvertising(peripheralData)
;你是否 意味着使用NSDictionary
强制向下倾斜?
然而,迫使垂头丧气总是失败。
这是文档错误,Swift 2.0中的错误,还是我错过了什么?
答案 0 :(得分:3)
问题似乎是NSMutableDictionary
不容易转换为Swift的Dictionary
,但NSDictinoary
是。NSMutableDictionary
。所以我最终首先将NSDictinoary
转换为let pd = NSDictionary(dictionary: region.peripheralDataWithMeasuredPower(nil))
as! [String: AnyObject]
peripheralManager.startAdvertising(pd)
:
{{1}}
它有效!