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

时间:2016-02-03 18:46:29

标签: objective-c swift

假设我有一些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?如果没有,任何人都可以向我指出任何有关为什么不可用的文件吗?

1 个答案:

答案 0 :(得分:7)

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

然而,正在考虑使用Swift 3.0(参见提案here

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