Проблема Xcode 8.0 CBCentralManager

Недавно я загрузил Xcode 8.0 и попытался запустить свой предыдущий проект, в котором используется основной Bluetooth.

Я включил Использовать устаревшую языковую версию Swift в настройках сборки для совместимости в Swift 2.3, все работает, но возникла одна проблема,

func centralManagerDidUpdateState(central: CBCentralManager)
{
    print("state is \(central.state.rawValue)")
    if (central.state == CBCentralManagerState.PoweredOn)
    {
        self.centralManager?.scanForPeripheralsWithServices([serviceUUID], options: nil)
    }
    else
    {
        // do something like alert the user that ble is not on
    }
}

ранее central.state возвращал тип CBCentralManagerState как int, но теперь он возвращает CBManagerState, поэтому получил ошибку, поэтому я изменил на

 if (central.state == CBManagerState.PoweredOn)

Но CBManagerState поддерживается только в IOS 10+, но я хочу создать его для IOS 8.3+, так как я могу изменить код?

ОБНОВЛЕНИЕ Я также преобразовал проект в swift 3.0, но все еще та же проблема, так как я могу запустить этот проект на мобильных устройствах с версией iOS ниже 10?


person Sagar Devkota    schedule 21.09.2016    source источник


Ответы (1)


Самый простой подход — просто использовать сокращенную ссылку на значение перечисления:

func centralManagerDidUpdateState(central: CBCentralManager)
{
    print("state is \(central.state.rawValue)")
    if (central.state == .PoweredOn)
    {
        self.centralManager?.scanForPeripheralsWithServices([serviceUUID], options: nil)
    }
    else
    {
        // do something like alert the user that ble is not on
    }

}

Теперь ваш код будет компилироваться без ошибок и предупреждений и корректно работать на всех таргетах.

person Paulw11    schedule 21.09.2016