簡體   English   中英

在使用swift類編寫的objectiveC類中沒有用於選擇器的已知類方法

[英]No known class method for selector in objectiveC class found written in swift class

我在一個swift類中編寫了一個類函數,然后嘗試從一個objectiveC類訪問相同的函數,獲取選擇器'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);
        }
    }];
}
}

將@objc屬性添加到func以將Swift代碼暴露給Objective-C

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

除了Scriptable的答案。 如果要在類中將所有函數公開給Objective-C。 然后添加@objcMembers屬性。

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

   }
}

通過在類中添加@objcMembers屬性,您無需在函數中添加@objc屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM