Xcode 8.0 CBCentralManager 问题

Posted

技术标签:

【中文标题】Xcode 8.0 CBCentralManager 问题【英文标题】:Xcode 8.0 CBCentralManager Issue 【发布时间】:2016-09-21 01:53:21 【问题描述】:

我最近下载了 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】:

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

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
    


现在您的代码将在没有错误或警告的情况下编译,并且可以在所有目标上正常工作

【讨论】:

以上是关于Xcode 8.0 CBCentralManager 问题的主要内容,如果未能解决你的问题,请参考以下文章

打印可变展开 Segue - Xcode 8.0 Swift 3.0

Xcode 8.0注释的问题

Xcode 8.0 CBCentralManager 问题

将 Xcode 7.3.1 项目升级到 Xcode 8.0

IPHONEOS_DEPLOYMENT_TARGET 设置为 8.0 Xcode 12 (Flutter)

ios,xcode 8.0构建版本失效问题,