【问题标题】:Swift class function not being calledSwift 类函数没有被调用
【发布时间】:2014-12-27 23:13:29
【问题描述】:

我有以下用 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 从未被调用,我不知道为什么。

【问题讨论】:

    标签: ios class inheritance swift cbcentralmanager


    【解决方案1】:

    考虑以下几行:

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

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

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

    因此,您需要学习内存管理,以便了解事物为何以及如何持续存在,并且您需要学习 Swift 的基础知识,以便了解如何实例化一个类。您的代码清楚地表明您不了解其中任何一个。它们是非常基本的,所以在你做之前不要再进一步了。

    【讨论】:

    • 另外,不要使用小写字母来开始类名。 现在停止。你只是在混淆自己。
    • 另外,你真的想继承 CBCentralManager 吗?你真的希望同一个对象既是 CBCentralManager 又是 CBCentralManagerDelegate?真的吗? 真的吗?
    猜你喜欢
    • 2021-11-12
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    • 2015-03-30
    • 2015-01-31
    • 1970-01-01
    • 2019-10-17
    相关资源
    最近更新 更多