2

我在 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:’

我怎样才能调用这个函数?

4

2 回答 2

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) {

}];
于 2018-01-03T05:24:32.060 回答
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

public 关键字的存在似乎并没有影响它

于 2019-06-03T19:12:04.053 回答