Xcode 8.0 CBCentralManager Issue

試著忘記壹切 提交于 2019-12-04 05:37:42

问题


I recently downloaded Xcode 8.0 and trying to run my previous project which uses core bluetooth.

I have enabled Use Legacy Swift Language Version in build setting for compatibility in swift 2.3 everything works, but one Issue occured,

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
    }
}

previously central.state would return CBCentralManagerState type as int but now it returns CBManagerState so got an error so i changed to

 if (central.state == CBManagerState.PoweredOn)

But CBManagerState is only supported in IOS 10+ but i want to build it for IOS 8.3+ so how can I change the code?

UPDATE I also converted project to swift 3.0, but still same issue, so how can i run this project on mobiles with ios version below 10?


回答1:


The simplest approach is just to use the short-hand reference to the enumeration value:

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
    }

}

Now your code will compile without errors or warnings and works correctly on all targets



来源:https://stackoverflow.com/questions/39606316/xcode-8-0-cbcentralmanager-issue

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!