ios - 找不到用 swift 类编写的 Objective-C 类中选择器的已知类方法

标签 ios objective-c swift swift4 xcode10.1

我在一个 swift 类中编写了一个类函数,然后尝试从一个 objectiveC 类中访问相同的函数,但选择器“myMethodName”没有已知的类方法。我也完成了 #import "ProjectName-Swift.h" 。它在低于 10.1 的 Xcode 中正常工作。请尽早帮助我。提前致谢。

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

最佳答案

添加到 Scriptable 的答案。如果您想在一个类中将所有功能公开给 Objective-C。然后添加 @objcMembers 属性。

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

   }
}

通过在类中添加@objcMembers 属性,您无需在函数中添加@objc 属性。

关于ios - 找不到用 swift 类编写的 Objective-C 类中选择器的已知类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54111195/

相关文章:

ios - 重新加载数据后未调用 UICollectionViewCell draw() 方法

objective-c - 如何从 NSString 中提取/拆分数字和字符串

swift - 我的完成处理程序总是返回一个空数组,为什么?

swift - 有关 OptionSetType 的基本问题

Objective-C iOS NSURLConnection statusCode 400 没有正文返回

ios - 如何将 .plist xml 字符串转换为 NSDictionary

ios - AWS Dynamodb测试使用swift 3报错

iphone - 只需在我的应用程序中进行控制即可发出 sigabrt 信号

ios - 如何从一致的类中正确设置协议(protocol)中的属性?

ios - 如何在不打开 MailComposer 或 objective-c 中的新 View 的情况下通过代码发送邮件