2015-11-01 10 views
22

すべてのクラスでSwift Cocoapodsをグローバルにインポートする方法を知りたいのですが、これをどのように達成できますか?Swiftフレームワークをグローバルにインポートするにはどうすればいいですか?

私は多くのことを試してみましたが、彼らは動作しませんでした。

UIKitのような一般的なimport文を持って、そこにすべてをかける:ここで私は試していないし、それらを動作させる方法を発見した場合の思考は可能かもしれないいくつかの方法があります。 (編集:これは失敗したが)

どういうわけかのObj-Cのbridingヘッダーでスウィフト枠組みを入れて、そこに何かをインポートします。

+0

はい、ブリッジヘッダーを使用します。この質問はこれと重複しているかもしれません:http://stackoverflow.com/questions/30162622/import-framework-for-whole-project-at-one-place-in-swift – prolfe

+1

実際には明らかに答えは受け入れられませんでしたが、そうすることができないかもしれません...私は答えがあなたがこれを迅速に行うことができないかもしれないと思う。フレームワークを使用しているすべてのファイルにインポートする必要があります。 – prolfe

+0

OP、何があなたの答えを受け入れるのを止めていますか? @prolfe残念ながら、これを回避する方法はありません。それは良い方法です。コードは必要な場所でしか利用できないため、すべてをコンパイル/実行することが可能になります。 – Krodak

答えて

9

これを行うに方法はありません。これはバグではなく、これは言語機能です(これまでのところ、Swift 2.2と言います)。

スウィフトはモジュールが(AppleはObjective-CのためのXcode 5でそれらを導入)を使用して明示的にモジュールが定義ファイルにさらされているのXcodeに通知する必要がありますので、それぞれのファイルには、意味単位です。

は、あなたの説明した動作はサポートされていませんだけでなく、あなたもそれを回避しようとするべきではありません。不要な(未使用の)モジュールを使用すると、理論的に遅いコードが生成される可能性があります(コンパイラがこの情報を最適化プロセスに使用することを考慮して)。

+0

さらに、XcodeはあなたのSwiftファイルのためのあなたのフレームワークの1つを魔法のように知るかもしれませんが、AppCodeは完全に混乱します。フレームワーククライアントのSwiftファイルごとに 'import'を実行する必要があります。 –

+0

@Krodakあなたはリンゴのリンクを持っていることが起こるのでしょうか?私は強くあなたに同意しますが、私はリンゴから何らかの形の表示が本当に好きです。ありがとう。 –

0

あなたがこれを行うにはしたくないでしょう理由:

両方あなたのフレームワークは同じメソッド名を使用する場合はcompiler.Theコンパイラが知ることができませんため、それは物事が曖昧になるだろうと想像どのメソッドを実行する必要があります。より多くのそれは、モジュール間の暗黙的な結合を導入するので、それを強くスウィフトに落胆していますthis質問

12

を参照してください見つけるために

。 Swift4のとおり

import ModuleName 
public typealias ClassName = ModuleName.ClassName 
+0

100%疎結合成分は理論上のみ存在します。プロジェクト全体では、常にグローバルライブラリの依存関係があります。たとえば、ログレベルのカスタムロガーが良い例です。したがって、タリアリア症はそのような場合に完全に適合する。 – Centurion

2

  • スウィフトプロジェクト
  • にいる

    ただし、他のモジュールをインポートモジュールでtypealiasを宣言することによって、グローバルに利用できる特定のシンボルを作ることができます

  • 他のSwiftプロジェクトを全世界に広げたい (ココアポッドを使用)

私はちょうど私の橋渡しヘッダに以下の行を追加していることを行うために管理:

#import <PodName/PodName-Swift.h> 

この練習はどのように良い/悪いですか?わかりませんが、プロジェクトでグローバルに使用できる拡張機能がほしいと思っています。これはトリックでした。

2

は、インポートする前に@_exportedを追加することによって、グローバルにインポートすることができるはずです。

@_exported import Podname

しかし、言及した以前のポスターのように、これは推奨されません。

関連する問題