2016-02-03 6 views
5

は、私はObjective-Cのに公開したいメソッドを持ついくつかのスウィフトクラスがあるとしましょう:Swiftのデフォルトのパラメータ値をObjective-Cに公開できますか?

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

私は2つの方法でこれを呼び出すことができます。

Worker().performWork() 
Worker().performWork("Swift Development") 

しかし、Objective-から呼び出された場合C、私はこのメソッドの「デフォルト」のバージョンを取得していない - 私ラベルを指定する必要があります。

[[[Worker alloc] init] performWork:@"Obj-C Development"]; 

メートルから定義を参照してください。以下Y 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関数を生成します(つまり、 Obj-Cで使用するtypical implementationを隠している構文的な砂糖です)。

Objective-Cにこのデフォルト値を公開する方法はありますか?そうでない場合は、誰も私がなぜこれが利用できないのかのドキュメントを指摘できますか?

+0

で指摘したようにこれが間違っている、私はあなたがAppleの「より良い理由を買ってあげる疑いますそれに到達するには余りにも忙しいです "。昨年のWWDCで、すべての会談はSwiftに関するものでした。 ObjCには2つの新機能しかありません:nullabilityマーカーとジェネリックス –

答えて

3

答えはいいえ、現在のところ公開する方法はありません。

それはしかし、

EDIT(案hereを参照)スウィフト3.0のために検討されている:アダム・S.

+0

私はその提案を読んで、Obj-C APIを公開する際にSwiftのデフォルトパラメータを利用することを検討しています。迅速_。これは素晴らしいですが、私は他の方向を探しています - 私が誤解していたり​​、何かを見落としていない限り。 –

+0

[これは私が参照しているセクションです](https://github.com/apple/swift-evolution/blob/master/proposals/0005-objective-c-name-translation.md#add-default-arguments )あなたのSwiftコードでその潜在的な機能を利用するために加えられた変更を記述します。 –

+0

@AdamSあなたは非常に正しいです。私はメーリングリストのタイトルを読み飛ばし、前提を作った(私はその提案の題名を考慮したはずだった) – ssrobbi

関連する問題