没有调用Swift类函数

时间:2014-10-31 15:16:05

标签: ios class inheritance swift cbcentralmanager

我在 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从未被调用过,我不确定原因。

1 个答案:

答案 0 :(得分:1)

考虑以下几点:

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

之后,myBean是什么?它没有!您已创建变量并声明其类型,但您从未为其分配任何对象。然后,您创建myBeanMgr,其委托为myBean,即为零。你有一个带有nil委托的对象。没有人可以收到代表留言。

此外,viewDidLoad然后结束,包括myBeanMgr在内的所有局部变量立即被销毁。所以现在你甚至不再拥有myBeanMgr了。你有没有。没有CBCentralManager。没有CBCentralManagerDelegate。什么都没有。

因此,您需要学习内存管理,以便了解事情的原因和方式,并且您需要学习Swift的基础知识,以便了解如何实例化类。您的代码清楚地表明您不了解其中任何一项。它们非常基础,所以不要再做了。