- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
//自定义类
public protocol BluetoothManagerProtocol {
var delegate: CBCentralManagerDelegate? {get set}
//var state: CBCentralManagerState { get }
func scanForPeripheralsWithServices(serviceUUIDs: [CBUUID]?, options: [String : AnyObject]?)
func stopScan()
func connectPeripheral(peripheral: CBPeripheral, options: [String : AnyObject]?)
func connectPeripheral(peripheral: BluetoothPeripheral, options: [String : AnyObject]?)
}
extension CBCentralManager : BluetoothManagerProtocol {
public func connectPeripheral(peripheral: CBPeripheral, options: [String : AnyObject]?) {
//
}
public func scanForPeripheralsWithServices(serviceUUIDs: [CBUUID]?, options: [String : AnyObject]?) {
//
}
public func connectPeripheral(peripheral: BluetoothPeripheral, options: [String : AnyObject]?) {
guard let peripheral = peripheral as? CBPeripheral else {
return
}
connectPeripheral(peripheral, options: options)
}
}
extension CBCentralManagerDelegate{
func centralManager(central: BluetoothManagerProtocol, didDiscoverPeripheral peripheral: BluetoothPeripheral, advertisementData: [String : AnyObject], RSSI: NSNumber) {}
func centralManager(central: BluetoothManagerProtocol,didConnectPeripheral peripheral:BluetoothPeripheral) {}
func centralManagerDidUpdateState(central: BluetoothManagerProtocol) {}
func centralManager(central: BluetoothManagerProtocol, didDisconnectPeripheral peripheral: BluetoothPeripheral, error: NSError?) {}
}
我刚刚进入了 Swift 中协议(protocol)和委托(delegate)的高级主题。我很惊讶,CBCentralManager 可以扩展自定义协议(protocol)吗?如何使用自定义协议(protocol)对 CBCentralManagerDelegate 方法进行参数化?这背后的概念是什么?究竟需要什么?
这是用 swift 2.3 编写的。这个策略在 Swift 4.0 中有效吗?
最佳答案
是的,CBCentralManager 来自 Core Bluetooth 框架,可以包含自定义协议(protocol)定义。遵循此方法以利用 TDD - 测试驱动开发。
由于单元测试蓝牙功能使得同步设备变得困难,开发人员通过创建自己的自定义方法而不是使用 Apple 为 iOS 框架提供的方法来利用依赖注入(inject)来模拟方法。
您可以为 UIView、UIColor 等包含您自己的自定义方法。
例如
class MockCBCentralManager : BluetoothManagerProtocol {
var delegate: CBCentralManagerDelegate?
var scanCalled: Bool = false
var connectPeripheralCalled = false
fileprivate var internalState: CBCentralManagerState = .unknown
var state: CBCentralManagerState {
get {
return internalState
}
}
}
func scanForPeripheralsWithServices(_ serviceUUIDs: [CBUUID]?, options[String : AnyObject]?)
{
scanCalled = true
let advertisementData =
[CBAdvertisementDataServiceUUIDsKey :
[STUDENT_APP_UUID],CBAdvertisementDataLocalNameKey:"MockPeripheral"]
let mock = MockPeripheral()
(delegate as? CentralManager)?.centralManager(self,
didDiscoverPeripheral: mock, advertisementData:
advertisementData,RSSI: 90)
}
更多信息可以在 https://nomothetis.svbtle.com/the-ghost-of-swift-bugs-future
干杯!
关于ios - CBCentralManager 可以扩展自定义协议(protocol)吗?我们可以覆盖 CBCentralManagerDelegate 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46369445/
我正在尝试在部署目标为 10.12 的 MacOS 上的 Swift 中实现 Apple 用 Objective-C 编写的示例代码。示例可以在这里找到以供引用:Heart Rate Monitor
在我的CBCentralManagerDelegate 协议(protocol)实现中,我有以下功能。 func centralManager(_ central: CBCentralManager,
我创建一个继承自 NSObject 的类并添加delegate方法。在我的类里面,我想使用 CBCentralManager 及其委托(delegate)方法。但是委托(delegate)方法没有被调
在我的应用程序中,当我启动应用程序时,我想检查设备蓝牙是否打开或关闭。一般来说,我们可以在 CBCentralManagerDelegate 中获取它。这是我的代码 var manager:
我正在尝试实现 BLEHandler。 这是我的代码: import CoreBluetooth class BLEHandler : NSObject, CBCentralManagerDelega
我正在尝试初始化中央管理器实例以制作具有蓝牙连接的应用。 这是我的部分代码: class ViewController: UIViewController, CBCentralManagerDeleg
我需要一些建议 我正在尝试实现 Unity BLE Ios 插件。我在尝试在 xcode 中构建项目时遇到问题:未知的类名“CBCentralManagerDelegate”;您指的是“CBCentr
我想制作一个使用蓝牙进行通信的 ios 应用程序。我正在使用 swift。 所以首先我添加了 CoreBluetooth.framework,然后我添加了一个 bridge.h 并将文件添加到系统桥,
我有一个管理 BTLE 通信的 BluetoothManager 类。我可以扫描并连接到 CBPeripheral 并发现服务或特征。我有来自 CBCentralManagerDelegate 和 C
//自定义类 public protocol BluetoothManagerProtocol { var delegate: CBCentralManagerDelegate? {get s
问题 我正在使用 core-bluetooth 以 6 Hz 的速率将传感器数据(64-128 字节的数组)传输到 iPad(第 6 代)。它在 ios 12 中运行良好。在我更新到 ios 13 后
我是一名优秀的程序员,十分优秀!