我在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:^{
}];
但投掷"没有可见的@interface为' ClassName'声明选择器&some; someFunction:completionHandler:'
如何调用此功能?
答案 0 :(得分:2)
基本上NSObject是Apple开发中的基础对象类型。
大多数Objective-C类层次结构的根类,子类从该类继承运行时系统的基本接口,并具有表现为Objective-C对象的能力。
您的课程使用NSObject
晚餐课程(与您的要求相关)来定义。
class ClassName: NSObject {
class func someFunction(idValue: Int, completionHandler: @escaping (_ jsonData: String) -> ()) {
}
}
调用此函数
[ClassName someFunctionWithIdValue:12 completionHandler:^(NSString * test) {
}];
答案 1 :(得分:0)
除了继承自NSObject并使用@objc声明类外,似乎还必须将@objc添加到func声明中,以便在Objective-c类/文件中可以看到它。
像这样:
@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
公共关键字的存在似乎都没有影响