CLPeripheralManager.startAdvertising не принимает возвращаемое значение CLBeaconRegion.peripheralDataWithMeasuredPower
Согласно документации Swift 2.0 для CLBeaconRegion
, все еще должно быть возможно передать вывод peripheralDataWithMeasuredPower:
метод к startAdvertising:
метод CLPeripheralManager
,
Получение данных рекламы Beacon
- peripheralDataWithMeasuredPower:
Извлекает данные, которые можно использовать для рекламы текущего устройства в качестве маяка.
декларация
СВИФТ
func peripheralDataWithMeasuredPower(_measuredPower: NSNumber?) -> NSMutableDictionary
Objective-C
- (NSMutableDictionary<NSString *,id> * _Nonnull)peripheralDataWithMeasuredPower:(NSNumber * _Nullable)measuredPower
параметры
measuredPower
Значение индикатора уровня принятого сигнала (RSSI) (измеряется в децибелах) для устройства. Это значение представляет собой измеренную силу маяка на расстоянии одного метра и используется во время измерения дальности. Уточнитьnil
использовать значение по умолчанию для устройства.Возвращаемое значение
Словарь данных, который вы можете использовать вместе с
CBPeripheralManager
рекламировать текущее устройство как маяк.обсуждение
Возвращенный словарь кодирует идентификационную информацию маяка вместе с другой информацией, необходимой для рекламы маяка. Вам не нужно напрямую обращаться к содержимому словаря. Передайте словарь
startAdvertising:
методCBPeripheralManager
начать рекламу маяка.Доступность
Доступный в iOS 7.0 и позже.
Тем не мение, peripheralDataWithMeasuredPower:
возвращает NSMutableDictionary
тогда как startAdvertising:
метод CLPeripheralManager
принимает быстрый словарь [String : AnyObject]?
хотя документация утверждает, что она принимает NSDictionary
, Следующий код, который работал в Swift 1.0:
// 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)
В Swift 2.0 один и тот же код не компилируется с предупреждением: не компилируется с предупреждением:
NSDictionary
не конвертируется в[String : AnyObject]
; ты хотел использоватьas!
заставить опуститься?
Однако, принуждение к падению всегда терпит неудачу.
Это ошибка документации, ошибка в Swift 2.0, или я что-то упустил?
1 ответ
Кажется, проблема в том, что NSMutableDictionary
не легко конвертируется в Swift Dictionary
, но NSDictinoary
является. Так что я закончил преобразование NSMutableDictionary
к NSDictinoary
первый:
let pd = NSDictionary(dictionary: region.peripheralDataWithMeasuredPower(nil))
as! [String: AnyObject]
peripheralManager.startAdvertising(pd)
И это работает!