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

标签 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 header 中的定义:

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

最佳答案

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

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

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

关于objective-c - 我可以将 Swift 默认参数值公开给 Objective-C 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35185182/

相关文章:

ios - 在 Firebase 身份验证中更新电话号码 - Swift

ios - Swift: View Controller 中的自定义 UIButton 类触摸事件未触发?

swift - 在 MusicSequenceUserCallback 中传递的函数参数

ios - Objective-C:如何将字符串传递给 .xib 文件并显示 MapView?

ios - NSURLConnection 没有在主线程上运行

ios - 从 `plist` 获取数据

ios - 点击 AnnotationCallout 时如何检索 NSDictionary 的实例? swift

当手机处于 sleep 模式时,iOS BLE 在后台扫描广告数据

ios - 图像不适合缩放以填充 ImageView 中的模式

xcode - 如何向 Apple 提交 XCode 错误?