gpt4 book ai didi

swift - Swift 中的类委托(delegate)

转载 作者:行者123 更新时间:2023-11-30 13:20:31 25 4
gpt4 key购买 nike

我有一个似乎无法解决的委托(delegate)/初始化问题。基本上我有一个带有一些 View Controller 的 Storyboard。在 Storyboard内部有一个“ View Controller ”,它由一个 UITableview 组成,我已将它与 DeviceListViewController 类连接起来,以便它填充信息。在这里我声明了以下协议(protocol):

protocol DeviceListViewControllerDelegate: UIAlertViewDelegate {
var connectionMode:ConnectionMode { get }
func connectPeripheral(peripheral:CBPeripheral, mode:ConnectionMode)
func stopScan()
func startScan()
}

在类本身内部,我有一个像这样的 init 方法(这可能是错误的,但我不知道此时我还能做什么):

 convenience init(aDelegate: DeviceListViewControllerDelegate) {

self.init()

self.delegate = aDelegate
}

然后是第二个类,它不附加到任何 View Controller ,称为 BLEMainViewController。它应该是处理所有蓝牙操作的单例。这意味着我应该能够在 DevicelistViewController 和 BLEMainViewController 之间委托(delegate)一些东西。

在 BLEMainViewController 中,我继承了 DeviceListViewControllerDelegate:

class BLEMainViewController: NSObject, DeviceListViewControllerDelegate {

var deviceListViewController:DeviceListViewController!
var delegate: BLEMainViewControllerDelegate?
static let sharedInstance = BLEMainViewController()

}

override init() {
super.init()
// deviceListViewController.delegate = self
deviceListViewController = DeviceListViewController(aDelegate: self)
}

问题是 BLEMainViewController 未附加到任何 View Controller (在我看来,它不应该附加),但需要将其初始化为单例才能处理所有 BLE 操作。谁能指出我正确的方向(最好有一个例子)来解决这个问题?

Setup

最佳答案

我认为您只是使用了错误的代码架构。

BLEManager 是一个共享实例,您可以从任何地方调用它、设置它的属性并调用它的方法。它可以将您添加到其协议(protocol)中的任何预定义事件委托(delegate)给您的 View Controller ,并提供正确的实现

这是一些代码,希望有帮助

protocol BLEManagerDelegate{
func bleManagerDidStartScan(manager : BLEManager)
}

class BLEManager: NSObject {
static let sharedInstance = BLEManager()

var delegate: BLEManagerDelegate?
var devices : [AnyObject] = []

func startScan(){
delegate?.bleManagerDidStartScan(self)
//do what ever
}

func stopScan(){

}
}

关于swift - Swift 中的类委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37809829/

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