gpt4 book ai didi

ios - 未调用 Swift 类函数

转载 作者:行者123 更新时间:2023-11-29 02:32:51 26 4
gpt4 key购买 nike

我有以下用Swift编写的:

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,其委托(delegate)为 myBean,即 nil。您有一个带有 nil 委托(delegate)的对象。没有人在家收到代表留言。

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

因此,您需要学习内存管理,以便了解事情为何以及如何持续存在,您还需要学习 Swift 的基础知识,以便了解如何实例化类。您的代码清楚地表明您不了解这些事情。它们非常基础,所以在您真正了解之前不要再继续了。

关于ios - 未调用 Swift 类函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26677961/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com