gpt4 book ai didi

ios - 如何等到委托(delegate)方法被调用?

转载 作者:行者123 更新时间:2023-11-28 08:47:59 24 4
gpt4 key购买 nike

我想创建一个方法 startCentralManager等到委托(delegate)方法 centralManagerDidUpdateState被调用并根据中央状态返回一个 bool 值。

我想使用这样的方法:

let centralManager = CentralManager()
let ready = centralManager.startCentralManager()

CentralManager 类应该看起来像这样

class CentralManager: NSObject, CBCentralManagerDelegate {
var centralManager: CBCentralManager?

func startCentralManager() -> Bool {
centralManager = CBCentralManager.init(delegate: self, queue: nil)
}

func centralManagerDidUpdateState(central: CBCentralManager) {
// startCentralManager() should return this
return central.state == CBCentralManagerState.PoweredOn
}
}

我该如何解决这个问题?

非常感谢您。

更新:

还有一些其他的方法,但是情况差不多。另一种方法如下:

let connected = centralManager.connect<PARAMS>)

在这个方法中如果必须要调用

func scanForPeripheralsWithServices(_ serviceUUIDs: [CBUUID]?, options options: [String : AnyObject]?)

等待委托(delegate)方法

func centralManager(_ central: CBCentralManager, didDiscoverPeripheral peripheral: CBPeripheral, advertisementData advertisementData: [String : AnyObject], RSSI RSSI: NSNumber)

被调用。在这里,我必须打电话

func connectPeripheral(_ peripheral: CBPeripheral, options options: [String : AnyObject]?)

再次等到委托(delegate)方法

func centralManager(_ central: CBCentralManager, didConnectPeripheral peripheral: CBPeripheral)

被调用。如果成功,请调用 centralManager.connect(<PARAMS>)应该返回 true .

最佳答案

CBCentralManager 异步工作,您可以在您无法直接控制的某个时间点通过调用您的委托(delegate)来了解其状态。

你不能等待两行代码之间的异步响应。您必须以不同的方式设计您的程序。

如果您有一个依赖于 CBCentralManager 就绪状态的 View Controller ,您可以将其作为委托(delegate)并在调用 centralManagerDidUpdateState 函数时启用其外围相关控件。

例如(如果您将其用于扫描仪):

class ScanningViewController:UIViewController,CBCentralManagerDelegate
{
var centralManager: CBCentralManager? = nil
override viewDidLoad()
{
centralManager = CBCentralManager.init(delegate: self, queue: nil)
}

func centralManagerDidUpdateState(central: CBCentralManager)
{
if central.state == CBCentralManagerState.PoweredOn
{
// enable scanning controls here
}
}
}

关于ios - 如何等到委托(delegate)方法被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34798972/

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