Xcode 8.0 CBCentralManager问题

时间:2016-09-21 01:53:22

标签: swift xcode core-bluetooth ios10 xcode8

我最近下载了Xcode 8.0并试图运行我之前使用核心蓝牙的项目。

我在构建设置中启用了使用旧版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的手机上运行这个项目呢?

1 个答案:

答案 0 :(得分:3)

最简单的方法就是使用枚举值的简写引用:

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
    }

}

现在您的代码将编译时没有错误或警告,并且可以在所有目标上正常运行