2015-10-08 5 views
8

に-Swift.hを含めます。 Objective-CでSwiftパブリックAPIにアクセスするには、現在、APIコンシューマは "MyModule-Swift.h"をインポートする必要があります。私はすでに "MyModule.h"というObjective-Cの傘のヘッダを持っています。しかし、 "MyModule.h"のインポートは、Swift APIでは機能しません。私は傘のヘッダーで "MyModule-Swift.h"をインポートしようとしましたが、それを見つけることはできません(私はそれがXcodeによってその場で生成されていると仮定しています)。私は混合スウィフトとObjective-Cプロジェクトを有する傘ヘッダ

APIの消費者は常にスウィフト/ Objective-Cで書かれたパブリックAPIを使用するには、「MyModule.h」をインポートできるように任意の提案は本当に理解されるであろう。

============================================== ========================

を編集してください。質問を正しくフレームする時間がないことをお詫びします。私はMyModuleと呼ばれるフレームワークを持っています。

私はスウィフトを使用して、このクラスに新しい振る舞いを追加したいので、私は拡張子今

extension ABUser { 

func swiftWalk() 

} 

を定義し、ABUserと呼ばれるObjective-Cのクラスを持っている

@interface ABUser: NSObject 

- (void)walk; 

@end 

、私が望んでいたと言いますObjective-CのアプリからABUserに定義されたswiftWalkメソッドにアクセスするために、私は#import <MyModule/MyModule-Swift.h>なければならないでしょう。 walkメソッドを使用する場合は、#import <MyModule/MyModule.h>が機能します。これは、傘のヘッダーMyModule.hのインポートABUser.hを想定しています。

私はいつもObjective-Cアプリを#import <MyModule/MyModule.h>にしていましたが、Objective-CやSwiftのいずれのフレームワークでもAPIが書かれているかどうかは心配する必要はありません。そこで、傘のヘッダーMyModule.hMyModule-Swift.hをインポートしようとしました。しかし、私のObjective-Cアプリケーションはコンパイルしませんでした。確かに、これは、MyModule-Swift.hがビルドプロセス中にXcodeによってオンザフライで生成されるためです。

編集2:ここでこの問題を再現するサンプルプロジェクトを追加しましたが:https://github.com/priteshshah1983/MyObjectiveCApp

関連するコードはViewController.mです。ビルドはmasterブランチで失敗します。それを動作させるには、workingブランチをチェックアウトしてください。

答えて

-1

対物-Cアプリから予想されるように@import MyModule;代わりに#import <MyModule/Module.h>を使用するwalkswiftWalk方法を使用することを可能にすることが判明しました。

私は正直に詳細を理解していないが、私は、これは他の誰かに役立ちます願っています。お気軽に説明してください!

+0

「私のやる気は何ですか?あなたは自分自身に正しい答えを与えたので、賞金は引き返すことができません。あなたは何のためにも50ポイントを投げ捨てました...そして、その質問はまだかなり腐っています。 "でも、これはうまくいかなかった"とはどういう意味ですか? – matt

+0

[OK]を、私は正しい答えとして私の答えを収縮した。申し訳ありませんが、私はこれよりも良く説明することはできません。あなたがすでに私に投票したことに気づいた! – pshah

+0

誰かが問題を理解して再現するために必要な実際のコードをすべて表示するだけではどうですか? – matt

2

@import MyModule;を使用する理由は、「モジュールはフレームワークの実行可能ファイルとそのヘッダーをまとめてパッケージ化している」(from this SO post)です。

つまり、@import MyModule;の場合、Objective-Cはモジュールに関連するすべての高速およびObjective-Cヘッダーを自動的にインポートしますが、傘のヘッダーからのスウィフトヘッダーは含めることができません。私はあなたがリンクされSOの回答で@import#importとの違いを見てみましょうお勧めします。

関連する問題