在过去的几周里,我一直在使用Xcode 9.3 (外围设备)和Cypress PSoC 4板(中央)进行BLE编程。我只使用了一个类PressureViewController,它实现了CBCentralManagerDelegate和CBPeripheralDelegate协议中所需的方法(和一些可选的方法)。
一切都很好。
对于如何最好地跨多个类使用相同的协议,我的知识是有限的。
我现在有了另一个类,MotorViewController,虽然它的功能与PressureViewController完全不同,但它需要实现来自这些委托协议的相同的BLE方法。
在使用这些方法时,两个类的逻辑流本质上是相同的。最后,每个类都有一个属性(对于压力类,它是一个表示电压的uint32_t;对于电机来说,它是一个代表径向位置的uint8_t )。
我不想要“复制和粘贴”所有这些方法,并创建特定于我的新类的双重版本。是否有一种方法可以创建一个处理CBCentralManagerDelegate和CBPeripheralDelegate方法的文件,这样我就可以遵从每个类中的任何内容?(今后,我将创建更多需要这些委托协议的类。)或者,复制和粘贴这些方法是否“无害,无害”?
谢谢,安东尼
发布于 2018-05-11 13:38:30
您可以创建一个像MyBluetoothDevice这样的新类来实现CBCentralManagerDelegate和CBPeripheralDelegate方法。然后在PressureViewController和MotorViewController中使用它。每当您需要设置委托时,都会传递MyBluetoothDevice实例而不是"self“。
您可以在一个视图控制器中使用两个MyBluetoothDevice实例,或者可能有一个共享实例(取决于您的用例)。
这种类型的功能共享就是OOP组合的一个例子。另一种方式是使用继承,但现代实践是倾向于组合而不是继承。
如果要将信息从视图控制器传递到MyBluetoothDevice,只需使用MyBluetoothDevice的属性和方法,并调用它们。
如果您希望在某个时候将信息从MyBluetoothDevice返回到视图控制器中,则可以定义自己的委托协议-- MyBluetoothDeviceDelegate,并将视图控制器设置为此委托事件的观察者。使用委托是一个安全的选择,但其他替代方法是使用处理程序/完成块或NSNotificationCenter向视图控制器报告事件。
https://stackoverflow.com/questions/50292689
复制相似问题