【发布时间】:2016-02-03 18:46:28
【问题描述】:
假设我有一些 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 函数(即它们是隐藏 typical implementation 我们的语法糖'会在 Obj-C 中使用)。
有没有办法将这个默认值暴露给 Objective-C?如果没有,任何人都可以向我指出为什么这不可用的任何文档吗?
【问题讨论】:
-
我怀疑你会得到比“Apple 太忙而无法处理它”更好的理由。在去年的 WWDC 上,所有的谈话都是关于 Swift 的。 ObjC 仅获得 2 个新功能:可空性标记和泛型
标签: objective-c swift