Swift 中蓝牙单例类的视图控制器中的观察者
Posted
技术标签:
【中文标题】Swift 中蓝牙单例类的视图控制器中的观察者【英文标题】:Observers in view controllers from Bluetooth singleton class in Swift 【发布时间】:2020-08-18 10:48:01 【问题描述】:我创建了一个单例类来与多个视图控制器交互。如何从单例类通知蓝牙状态?
import UIKit
import CoreBluetooth
class MyBluetoothManager: CBCentralManagerDelegate, CBPeripheralDelegate
static let shared = MyBluetoothManager()
let central = CBCentralManager(delegate: MyCentralManagerDelegate.shared,
queue: nil, options: nil)
我将在未来实现 CBPeripheral 的代表。建议我是否有任何现有的博客。
【问题讨论】:
【参考方案1】:你可以考虑NotificationCenter
。
在您的视图控制器中,您需要为您的自定义通知类型添加观察者。例如:
NotificationCenter.default.addObserver( self, selector: #selector( self.methodtohandle ), name: .yourcustomeventname, object: nil )
当不再需要/呈现控制器时,不要忘记移除观察者:
NotificationCenter.default.removeObserver(self, name: .yourcustomeventname, object: nil)
在你的单身课程上,你会称之为“post”:
NotificationCenter.default.post(name: .yourcustomeventname, object: somedata)
【讨论】:
我做到了@DimaG。我正在寻找更相关的答案。我不认为这是获得代表通知的唯一方法。顺便说一句,谢谢,因为我可以知道如何删除目标观察者。 这当然取决于你。根据您的代码,我假设您的“MyBluetoothManager”将实现委托协议,然后您需要将数据传递给视图控制器。对于这种情况,NotificationCenter 非常棒,因为它使 ViewControllers 和您的单例保持松散耦合。有一种方法可以通过回调来做到这一点,但是这样你就有可能导致内存泄漏。 谢谢。目前,我正在使用您的解决方案。它确实有效。以上是关于Swift 中蓝牙单例类的视图控制器中的观察者的主要内容,如果未能解决你的问题,请参考以下文章