我可以将Swift默认参数值公开给Objective-C吗?

Ada*_*m S 10 objective-c swift

假设我有一些Swift类,其中包含我想要暴露给Objective-C的方法:

@objc(Worker) class Worker : NSObject {
    func performWork(label: String = "Regular Work") {
        // Perform work
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以用两种方式来称呼它:

Worker().performWork()
Worker().performWork("Swift Development")
Run Code Online (Sandbox Code Playgroud)

但是,当从Objective-C调用时,我没有得到此方法的"默认"版本 - 我必须提供一个标签:

[[[Worker alloc] init] performWork:@"Obj-C Development"];
Run Code Online (Sandbox Code Playgroud)

请参阅AppName-Swift.h下面的标题中的定义:

SWIFT_CLASS_NAMED("Worker")
@interface Worker : NSObject
- (void)performWork:(NSString * __nonnull)label;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
Run Code Online (Sandbox Code Playgroud)

希望看到一个带有此签名的方法:

- (void)performWork;
Run Code Online (Sandbox Code Playgroud)

我意识到ObjC不支持默认参数值,但我的假设是Swift默认值只是生成额外的Swift函数,而简单的实现调用"真实"函数(即它们是语法糖,隐藏了我们用于的典型实现) OBJ-C).

有没有办法将此默认值公开给Objective-C?如果没有,任何人都可以向我指出任何文件,说明为什么这不可用?

ssr*_*bbi 7

答案是否定的,目前没有办法揭露它.

但是,正在考虑使用Swift 3.0(请参阅此处的提案)

编辑:这是不正确的,如Adam S.所指出的.

  • 那又怎样……这还是不可能吗? (2认同)