112

いくつかの投稿を検索しましたが、Swift で拡張機能を記述して、Objective-C コードから呼び出すことはできないと思いますよね?

@objc同様の属性は、メソッド、クラス、プロトコルのみをサポートしますか?

4

6 に答える 6

111

Swift 拡張機能を作成して、Objective-C コードで使用できます。Xcode 6.1.1 でテスト済み。

あなたがする必要があるのは次のとおりです。

  • Swift で拡張機能を作成します ( @objcSwift 4.0.3 以降では注釈が必要です)

  • #import "ProjectTarget-Swift.h"Objective-C クラス (「ProjectTarget」は、Swift 拡張機能が関連付けられている XCode ターゲットを表します)

  • Swift 拡張機能からメソッドを呼び出す

于 2015-02-04T12:09:46.133 に答える
43

他の回答で説明されているように、生成された Swift ヘッダーのインポートはほとんどの場合に機能します。

これに対する例外は、カテゴリがブリッジされた型で定義されている場合です (つまり、拡張子が ではStringなくで定義されていNSStringます)。これらのカテゴリは、対応する Objective-C に自動的にブリッジされることはありません。これを回避するには、Objective-C 型を使用する (および Swift コードで戻り値を でキャストするas String) か、Swift と Objective-C の両方の型の拡張を定義する必要があります。

于 2016-02-29T16:57:49.470 に答える