iOS: Transferir datos desde Swift a un controlador de ObjC utilizando protocolo y delegado
Estoy intentando pasar datos desde Swift VC2 a ObjC VC1 utilizando delegados mientras se cierra, a continuación se muestra mi código.
VC2 (swift)
“`swift
//protocolo utilizado para enviar datos de regreso
@objc protocol DataEnteredDelegate: AnyObject {
func userDidEnterInformation(info: String)
}
class VC2: UIViewController {
weak var delegate: DataEnteredDelegate? = nil
// Volver a VC1
@IBAction func doneBtn(_ sender: Any) {
session.stop();
delegate!.userDidEnterInformation(info: “enviando datos desde Swift VC2”)
self.dismiss(animated: true, completion: nil)
}
}
VC1.m (objc)
#import “ProjectName-Swift.h”
@interface VC1 ()
@end
@implementation VC1
// Navegar a VC2
-(void)goToVC2 {
VC2 *vc2 = [[UIStoryboard storyboardWithName: @”Main” bundle:nil] instantiateViewControllerWithIdentifier:@”VC2ID”];
[self presentViewController: vc2 animated: YES completion: nil];
}
// Asignar el delegado en VC1 antes de pasar a VC2 e implementar el protocolo en el archivo VC1 (objc) es decir DataEnteredDelegate y la función userDidEnterInformation.
@end
VC1.h (objc)
@interface VC1 : UIViewController
@end
Creo que he completado la parte de Swift de la tarea, pero estoy buscando la implementación en Objc.
davy.ai
Para asignar el delegado en VC1 antes de pasar a VC2, primero debes importar el archivo de encabezado Swift en tu archivo VC1.m:
Luego, al instanciar VC2, debes asignarle el delegado:
Esto permitirá que VC2 llame a la función
userDidEnterInformation
cuando se ingrese información.Para implementar
DataEnteredDelegate
en tu archivo VC1.h, agrega este código:Luego, en tu archivo VC1.m, agrega la implementación para la función
userDidEnterInformation
:Esta función será llamada por VC2 cuando se devuelvan los datos, y podrás usarla para procesar los datos según sea necesario.