首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免为每个自定义类实现多个所需的协议方法

如何避免为每个自定义类实现多个所需的协议方法
EN

Stack Overflow用户
提问于 2018-05-11 12:46:40
回答 1查看 43关注 0票数 0

在过去的几周里,我一直在使用Xcode 9.3 (外围设备)和Cypress PSoC 4板(中央)进行BLE编程。我只使用了一个类PressureViewController,它实现了CBCentralManagerDelegateCBPeripheralDelegate协议中所需的方法(和一些可选的方法)。

一切都很好。

对于如何最好地跨多个类使用相同的协议,我的知识是有限的。

我现在有了另一个类,MotorViewController,虽然它的功能与PressureViewController完全不同,但它需要实现来自这些委托协议的相同的BLE方法。

在使用这些方法时,两个类的逻辑流本质上是相同的。最后,每个类都有一个属性(对于压力类,它是一个表示电压的uint32_t;对于电机来说,它是一个代表径向位置的uint8_t )。

我不想要“复制和粘贴”所有这些方法,并创建特定于我的新类的双重版本。是否有一种方法可以创建一个处理CBCentralManagerDelegateCBPeripheralDelegate方法的文件,这样我就可以遵从每个类中的任何内容?(今后,我将创建更多需要这些委托协议的类。)或者,复制和粘贴这些方法是否“无害,无害”?

谢谢,安东尼

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-11 13:38:30

您可以创建一个像MyBluetoothDevice这样的新类来实现CBCentralManagerDelegateCBPeripheralDelegate方法。然后在PressureViewController和MotorViewController中使用它。每当您需要设置委托时,都会传递MyBluetoothDevice实例而不是"self“。

您可以在一个视图控制器中使用两个MyBluetoothDevice实例,或者可能有一个共享实例(取决于您的用例)。

这种类型的功能共享就是OOP组合的一个例子。另一种方式是使用继承,但现代实践是倾向于组合而不是继承。

如果要将信息从视图控制器传递到MyBluetoothDevice,只需使用MyBluetoothDevice的属性和方法,并调用它们。

如果您希望在某个时候将信息从MyBluetoothDevice返回到视图控制器中,则可以定义自己的委托协议-- MyBluetoothDeviceDelegate,并将视图控制器设置为此委托事件的观察者。使用委托是一个安全的选择,但其他替代方法是使用处理程序/完成块或NSNotificationCenter向视图控制器报告事件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50292689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档