假设我有一些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函数,并且通过简单的实现来调用" real"功能(即他们的语法糖隐藏了我们在Obj-C中使用的typical implementation。
有没有办法将此默认值公开给Objective-C?如果没有,任何人都可以向我指出任何有关为什么不可用的文件吗?