如何符合CBCentralManagerDelegate协议?

Far*_*ris 6 bluetooth ios swift

我正在尝试初始化中央管理器实例以创建具有蓝牙连接的应用程序.

这是我的代码的一部分:

class ViewController: UIViewController, CBCentralManagerDelegate {
   var myCentralManager = CBCentralManager(delegate: self, queue: nil) //error on this line
   func centralManagerDidUpdateState(central: CBCentralManager!) { 
}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

"键入'ViewController - >() - > ViewController!' 不符合协议'CBCentralManagerDelegate'

协议所需的唯一方法是centralManagerDidUpdateState()我添加的,为什么我会收到错误?

Mic*_*lum 5

错误消息有点欺骗性,使您远离实际问题。问题是您正在访问self存储属性的初始值设定项,您不能这样做。

一种解决方法是简单地声明属性而不对其进行初始化,然后将变量的赋值移动到某个地方,例如您的视图控制器的初始化程序,或您的视图控制器的生命周期方法之一,例如 viewDidLoad。


Che*_* Lv 5

创建中央管理器时,中央管理器调用其委托对象的centralManagerDidUpdateState方法.因此,您必须实现此委托方法,以确保支持蓝牙低功耗并可使用中央设备.如下所示:

func centralManagerDidUpdateState(central: CBCentralManager!){
    println("CentralManager is initialized")

    switch central.state{
    case CBCentralManagerState.Unauthorized:
        println("The app is not authorized to use Bluetooth low energy.")
    case CBCentralManagerState.PoweredOff:
        println("Bluetooth is currently powered off.")
    case CBCentralManagerState.PoweredOn:
        println("Bluetooth is currently powered on and available to use.")
    default:break
    }
}
Run Code Online (Sandbox Code Playgroud)