Я создал небольшой проект для проверки Bluetooth
с использованием CoreBluetooth
framework
. В моем viewController
он работает нормально так:
class ViewController: UIViewController {
var myCentral: CBCentralManager! = nil
override func viewDidLoad() {
super.viewDidLoad()
myCentral = CBCentralManager(delegate: self, queue: nil)
}
}
extension ViewController: CBCentralManagerDelegate {
func centralManagerDidUpdateState(_ central: CBCentralManager) {
if central.state == .poweredOn {
central.scanForPeripherals(withServices: nil, options: nil)
}
}
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
if let name = peripheral.name {
print(name)
}
}
}
Однако я хотел бы переместить перемещение Bluetooth
материала в другое class
и просто запустить его из viewController
. Это возможно? Моя попытка не работает:
В Новом class
, переместив вещи Bluetooth
:
class BLEhandler: NSObject {
var centralManager: CBCentralManager!
}
extension BLEhandler: CBCentralManagerDelegate {
func centralManagerDidUpdateState(_ central: CBCentralManager) {
if central.state == .poweredOn {
central.scanForPeripherals(withServices: nil, options: nil)
}
}
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
if let name = peripheral.name {
print(name)
}
print(peripheral.name)
}
}
И позвонив из viewController
:
override func viewDidLoad() {
super.viewDidLoad()
var centralManager = BLEhandler().centralManager
centralManager = CBCentralManager(delegate: self, queue: nil)
}
Теперь он показывает только маленький log
:
[CoreBluetooth] XP C недопустимое соединение
Я сомневаюсь, что смогу использовать delegates
вот так, и я думаю, что решение как-то связано с протоколами, но я не уверен. Как бы вы go перешли с delegates
на другие classes
и все же заставили бы их работать?