假设我有一些Swift类,其中包含我想要暴露给Objective-C的方法:
@objc(Worker) class Worker : NSObject {
func performWork(label: String = "Regular Work") {
// Perform work
}
}
我可以用两种方法调用它:
我可以用两种方法调用它:
Worker().performWork()
Worker().performWork("Swift Development")
然而,当从Objective-C中调用时,我无法获得该方法的“默认”版本 - 我必须提供一个标签:
[[[Worker alloc] init] performWork:@"Obj-C Development"];
请见下面我的AppName-Swift.h
头文件中的定义:
SWIFT_CLASS_NAMED("Worker")
@interface Worker : NSObject
- (void)performWork:(NSString * __nonnull)label;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
我会期望看到一个带有这个签名的方法:
- (void)performWork;
我意识到ObjC不支持默认参数值,但我的假设是Swift默认值只是生成额外的Swift函数,其具有调用“真实”函数的微不足道的实现(即它们是语法糖,隐藏了我们在Obj-C中使用的典型实现方式)。
是否有办法将此默认值暴露给Objective-C?如果没有,有人能指向任何关于为什么不可用的文档吗?