繁体   English   中英

Swift类函数未调用

[英]Swift class function not being called

我有以下用Swift编写的class

import UIKit
import CoreBluetooth

class vaBean: CBCentralManager, CBCentralManagerDelegate {

func centralManagerDidUpdateState(central: CBCentralManager!) {
    println("didUpdateState")
    switch (central.state) {
    case .PoweredOff:
        println("hardware is powered off")

    case .PoweredOn:
        println("hardware is powered on and ready")

    case .Resetting:
        println("hardware is resetting")

    case .Unauthorized:
        println("state is unauthorized")

    case .Unknown:
        println("state is unknown");

    case .Unsupported:
        println("hardware is unsupported on this platform");

    }
}
}

然后,我使用以下代码在主ViewController创建的实例:

import UIKit
import CoreBluetooth

class ViewController: UIViewController {

override func viewDidLoad() {
    println("bluetoothTest v1.00")
    super.viewDidLoad()
    var myBean: vaBean!
    var myBeanMgr = vaBean(delegate: myBean, queue: nil)
}

override func didReceiveMemoryWarning() {super.didReceiveMemoryWarning()}
}

该代码编译正常,但从未调用函数centralManagerDidUpdateState ,我不确定为什么。

考虑以下几行:

var myBean: vaBean!
var myBeanMgr = vaBean(delegate: myBean, queue: nil)

之后,什么是myBean 是零! 您已经创建了一个变量并声明了它的类型,但是您从未为其分配任何对象。 因此,然后创建myBeanMgr ,其委托为myBean ,为nil。 您有一个带有零委托的对象。 没有人可以接收委托消息。

此外, viewDidLoad随后结束,包括myBeanMgr在内的所有局部变量均被立即销毁。 因此,现在您甚至都没有myBeanMgr 什么没有 没有CBCentralManager。 没有CBCentralManagerDelegate。 没有。

因此,您需要学习内存管理,以便了解事物为什么以及如何持续存在,还需要学习Swift的基础知识,从而了解如何实例化类。 您的代码清楚地表明您不了解其中任何一件事。 它们非常基础,因此除非您做不到,否则请不要再说了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM