从 Objective-C 调用 Swift class 方法

Calling Swift class method from Objective-C

我在Swift

中有这个功能
class func someFunction(idValue: Int, completionHandler: @escaping (_ jsonData: JSON) -> ()) {
        (...)
        if (some validation) {
            completionHandler(jsonData)
        } else {
            completionHandler(JSON.null)
        }

    }

现在我想从 Objective-C 调用该函数。我正在做的是:

[[ClassName  new] someFunction:self.sesionId completionHandler:^{
    }];

但是正在抛出“'ClassName' 的不可见@interface 声明了选择器 'someFunction:completionHandler:'

如何调用这个函数?

本质上 NSObject 是 Apple 开发中的基本对象类型。

The root class of most Objective-C class hierarchies, from which subclasses inherit a basic interface to the runtime system and the ability to behave as Objective-C objects.

你的 class 是这样定义的,使用 NSObject supper class(与你的要求相关)。

class ClassName: NSObject {

    class func someFunction(idValue: Int, completionHandler: @escaping (_ jsonData: String) -> ()) {


    }
}

调用这个函数

[ClassName someFunctionWithIdValue:12 completionHandler:^(NSString * test) {

}];

除了继承自 NSObject 并用 @objc 声明 class 之外,似乎必须将 @objc 添加到 func 声明中才能在 objective-c classes/files 中看到.

像这样:

@objc class SomeClass:NSObject {


 @objc func someFunction(_:Any) -> Bool {  
        return true
       }

}

它会在正常调用时显示在自动完成中:

#import "PROJECT_Name-Swift.h"
@implementation SomeObjCClass
...


-(void)someObjCMethod{

    SomeClass* instance = [[SomeClass alloc]init];

    [instance someFunction:(id _Nonnull)]
}
...
@end

public 关键字的存在似乎没有任何影响