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

Objective c 如何避免为每个自定义类实现多个必需的协议方法,objective-c,xcode,protocols,Objective C,Xcode,Protocols,在过去的几周里,我一直在使用Xcode 9.3(外围设备)和Cypress PSoC 4板(中央设备)进行BLE编程。我只使用了一个类,PressureViewController,它实现了CBCentralManagerDelegate和cbperipheraldegate协议中所需的方法(以及一些可选方法) 一切正常 我对如何最好地跨多个类使用相同协议的知识有限 我现在有了另一个类,MotorViewController,虽然它的功能与PressureViewController完全不同,但

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

一切正常

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

我现在有了另一个类,
MotorViewController
,虽然它的功能与
PressureViewController
完全不同,但它需要从这些代理协议中实现相同的BLE方法

使用这些方法时,两个类的逻辑流基本相同。最后,每个类别都有一个属性(对于压力类别,它是表示电压的
uint32\u t
;对于电机,它是表示径向位置的
uint8\u t

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


谢谢,anthony

您可以创建一个新类,如
MyBluetoothDevice
,该类实现
CBCentralManagerDelegate
CBPeripherDelegate
方法。然后在PressureView控制器和MotorView控制器中使用它。每当您需要设置委托时,都会传递
MyBluetoothDevice
的实例,而不是“self”

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

这种类型的功能共享就是一个例子。另一种方法是使用继承,但现代的做法是偏爱构图而不是继承

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


如果您希望在某个时间点将信息从MyBluetooth设备返回到视图控制器中,您可以定义自己的代理协议-
MyBluetooth设备删除门
,并将视图控制器设置为此代理事件的观察者。使用委托是一种安全的选择,但其他替代方法是使用handler/completion块或NSNotificationCenter将事件报告回视图控制器。

非常好,非常简洁,谢谢。接下来的问题,您所说的
是什么意思?每当您需要设置代理时,您都会传递MyBluetoothDevice的实例,而不是“self”。
?很抱歉,仍在熟悉委派过程。例如,在使用委派创建CBCentralManager之前,您可能有类似于
[[CBCentralManager alloc]initWithDelegate:self…
的内容。如果它是在视图控制器内创建的,“self”是视图控制器。现在,如果您有类似“myBluetoothDevice”,您传递的是该属性而不是“self”。这看起来很适合代理:ohhhh mercy我现在看到了,这很有趣。也感谢链接,“欣赏它!”!