Escribí una función de clase en una clase rápida y luego intenté acceder a la misma desde una clase de ObjectiveC sin obtener un método de clase conocido para el selector 'myMethodName'. También hice #import "ProjectName-Swift.h" . Estaba funcionando correctamente con Xcode por debajo de 10.1. Por favor, ayúdame lo antes posible. Gracias por adelantado.
import UIKit typealias LoginCompletionHandler = (_: Bool) -> Void class SCLoginViewController: UIViewController { var myLoginCompletionBlock: LoginCompletionHandler? = nil // MARK: - View Lifecycle override func viewDidLoad() { super.viewDidLoad() } //PRAGMA:- Class Methods class func showOnNavigation(navigationController:UINavigationController, completionBlock:@escaping LoginCompletionHandler) { let vc = SCLoginViewController.init(nibName: "SCLoginViewController", bundle: nil) vc.myLoginCompletionBlock = completionBlock navigationController.pushViewController(vc, animated: true) } } #import "LoginOptionVC.h" #import "Project-Swift.h" @interface LoginOptionVC () <> @end @implementation LoginOptionVC - (instancetype)initWithBarButtonType:(BarButtonType)btnType showClubLogo:(BOOL)showLogo onCompletion:(CompletionHandler) completionBlock { self = [[ClubLoginOptionVC alloc]initWithNibName:@"ClubLoginOptionVC" bundle:nil]; if (self) { self.myCompletionBlock = completionBlock; } return self; } #pragma mark - View LifeCycle - (void)viewDidLoad { [super viewDidLoad]; - (IBAction)clickLogin:(id)sender { [SCLoginViewController showOnNavigationWithNavigationController:self.navigationController completionBlock:^(BOOL isSuccess) { if (isSuccess) { NSLog(@"logged in "); } if (self.myCompletionBlock) { self.myCompletionBlock(isSuccess); } }]; } }Adición a la respuesta de Scriptable. Si desea exponer todas las funciones a Objective-C en una clase. Luego agregue el atributo @objcMembers .
@objcMembers class MyController: UIViewController { class func showOnNavigation(navigationController:UINavigationController, completionBlock:@escaping LoginCompletionHandler) { } } Al agregar el atributo @objcMembers en una clase, no necesita agregar el atributo @objc en las funciones.
Agregue el atributo @objc a la función para exponer el código Swift a Objective-C
@obj class func showOnNavigation(navigationController:UINavigationController, completionBlock:@escaping LoginCompletionHandler)