从 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 关键字的存在似乎没有任何影响
我在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 关键字的存在似乎没有任何影响