CLPeripheralManager.startAdvertising不接受CLBeaconRegion.peripheralDataWithMeasuredPower

时间:2015-09-29 01:25:04

标签: ios swift2 ibeacon cbperipheralmanager clbeaconregion

根据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中的错误,还是我错过了什么?

1 个答案:

答案 0 :(得分:3)

问题似乎是NSMutableDictionary不容易转换为Swift的Dictionary,但NSDictinoary是。NSMutableDictionary。所以我最终首先将NSDictinoary转换为let pd = NSDictionary(dictionary: region.peripheralDataWithMeasuredPower(nil)) as! [String: AnyObject] peripheralManager.startAdvertising(pd)

{{1}}

它有效!