[英]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.