Не найден известный метод класса для селектора в классе targetC, написанный в классе swift - PullRequest
0 голосов
/ 09 января 2019

Я написал одну функцию класса в одном быстродействующем классе, затем пытался получить доступ к нему из одного класса Objective C, получив неизвестный метод класса для селектора 'myMethodName'. Я также сделал #import "ProjectName-Swift.h". Это работало должным образом с Xcode ниже 10.1. Пожалуйста, помогите мне как можно скорее. Заранее спасибо.

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);
        }
    }];
}
}

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

Дополнение к ответу Scriptable. Если вы хотите выставить всю функцию Objective-C в классе. Затем добавьте атрибут @objcMembers.

@objcMembers class MyController: UIViewController {
   class func showOnNavigation(navigationController:UINavigationController, completionBlock:@escaping LoginCompletionHandler) {

   }
}

Для добавления атрибута @objcMembers в класс вам не нужно добавлять атрибут @objc в функции.

0 голосов
/ 10 января 2019

Добавьте атрибут @objc в функцию, чтобы выставить код Swift в Objective-C

@obj class func showOnNavigation(navigationController:UINavigationController, completionBlock:@escaping LoginCompletionHandler)
...