Clase con delegado personalizado

Estoy creando un delegado personalizado en una class e intentando implementar el protocolo en mi controller. Pero no funciona como delegado es nulo. Así es como lo estoy haciendo:

BluetoothOperations.swit

protocol GetWatchCollectedData:NSObjectProtocol { func getWatchCollectedData(COMMAND_ID : UInt8, data : NSData) } class BluetoothOperations: NSObject{ var getWatchCollectedData: GetWatchCollectedData? func customFunc(){ getWatchCollectedData.getWatchCollectedData(ID,Data) } } 

SomeController.swift

 class SomeController: UIViewController { let object = BluetoothOperations() override func viewDidLoad() { super.viewDidLoad() object.getWatchCollectedData = self } } extension SomeController: GetWatchCollectedData{ func getWatchCollectedData(COMMAND_ID : UInt8, data : NSData){ print("delegate working.") } } 

También intenté hacer un object de class y asignar BluetoothOperations's object. getWatchCollectedData = self BluetoothOperations's object. getWatchCollectedData = self en viewDidLoad pero no funcionó.

¿Alguna idea de dónde lo estoy haciendo mal? Gracias.

Tu código parece correcto. Y aquí está la posible razón por la cual puede fallar. En su SomeController , está creando un object de su class BluetoothOperations y delegado asignado correctamente.

SIN EMBARGO, debe asegurarse de que el object definido en su controller envíe la llamada de delegado. Podría tener otra instancia de BluetoothOperations y que realmente se está utilizando, Y EN ESTA INSTANCIA, el delegado no está configurado.

La forma más fácil de verificar esto es desencadenar manualmente el delegado en el object que creó en su controller de vista. Pruebe el siguiente código para ver si el delegado se desencadena o no.

 class SomeController: UIViewController { let object = BluetoothOperations() override func viewDidLoad() { super.viewDidLoad() object.getWatchCollectedData = self object.customFunc()// Trigger the delegate function here } } extension SomeController: GetWatchCollectedData{ func getWatchCollectedData(COMMAND_ID : UInt8, data : NSData){ print("delegate working.") } } 

Has implementado correctamente el delegado pero no entre las classs apropiadas.

Como ha creado el object de BluetoothOperations en SomeController y también en otro controller View, digamos SomeController1

Ahora el delegado es responsable solo de la class relevante solamente

me gusta

 `BluetoothOperations` (Call `customFunc`) ----> `SomeController1` `BluetoothOperations` (Call `customFunc`) ----> `SomeController` 

Y estás intentando así

  `SomeController1 ---> `BluetoothOperations` (Call `customFunc`) ----> SomeController` 

Esto no se pudo lograr de esta manera,

Como su SomeController1 y SomeController no están en connection desde cualquier lugar

Es muy difícil sugerirle una respuesta.

crea delegado entre SomeController1 y SomeController ambos.

Espero que sea claro para ti