web-dev-qa-db-ja.com

Project-Swift.hをObjective-Cクラスにインポートしています...ファイルが見つかりません

Objective-Cで開始されたプロジェクトがあり、以前にObjective-Cを作成したのと同じクラスファイルにいくつかのSwiftコードをインポートしようとしています。

同じプロジェクトでAppleとObjective-C、およびSwiftの使用に関するSO docs を参照しました 質問 このようですが、まだ利用できません:#import "NewTestApp-Swift.h"NewTestAppは製品とモジュールの名前です)を入力した後、ファイルが見つかりませんというエラーが引き続き発生します。

これが私がこれまでに行ったことです。

  1. Define Modulesで、アプリのYESを選択しました。
  2. 製品モジュール名にスペースが含まれていないことを確認しました(質問の下のスクリーンショットを参照)

#import "NewTestApp-Swift.h"ViewController.m、およびViewController.h内でAppDelegate.mを使用しようとしましたが、いずれも機能していません。

私は間違って他に何をしていますか?ご協力いただきありがとうございます。


設定のスクリーンショット:

enter image description here


現在発生しているエラー:

enter image description here

109
daspianist

私は同じ問題にぶつかり、プロジェクトを取得してSwiftをobj-cクラスにインポートできませんでした。 Xcode 6を使用して(Xcode 6以降で動作するはずです)、この方法で実行できました。

  1. .hファイル内のにアクセスする必要があるクラスは、このような前方宣言である必要があります

@class MySwiftClass;

  1. .mファイルのみで、コードが同じプロジェクト(モジュール)にある場合は、次を使用してインポートする必要があります。

#import "ProductModuleName-Swift.h"

Appleドキュメントへのリンク

https://developer.Apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//Apple_ref/doc/uid/TP40014216-CH10-XID_87

125
bolnad

Swiftコードがモジュール内にある場合(あなたの場合のように):

#import <ProductName/ProductModuleName-Swift.h>

Swiftコードがプロジェクト内にある場合(SwiftとObjCが混在):

#import <ProductModuleName-Swift.h>

あなたの場合、*。mファイルに次の行を追加する必要があります。

#import <NewTestApp/NewTestApp-Swift.h>

重要:importステートメントの「<」を見てください

https://developer.Apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html

75
ikocel1

どのようにしてSwiftをObjective-cにインポートしたか:

  • Defines ModuleYESに設定(プロジェクト-ターゲットではない)
  • 製品モジュール名セット(プロジェクト上ではなくターゲット上)
  • ViewController.mでSwiftコードをインポートします:

    #import "MyProductModuleName-Swift.h"
    
  • SwiftファイルをObjective-Cプロジェクトに追加し(ファイル->新規-> Swift)、Xcodeはブリッジングヘッダーを作成します Objective-CからSwiftまでですが、これは逆に動作させるために重要ですどうやら。

このパズルの最後の部分については、既存のSwiftファイルをプロジェクトにドラッグアンドドロップするだけでなく、実際にSwiftファイルを実際にXcode GUIで追加することを認識させてくれたSwiftoverloadに感謝します: http://nikolakirev.com/blog/using-Swift-in-objective-c-project

48
holm50

Xcode 8.2.1を使用し、Project> Build Settings> Objective-C Generated Interface Header Nameを見ると、そこにある1つだけProduct-Swift.hのような名前のヘッダーファイル

つまり、個々の-Swift.hファイルを使用して、Objective-C .mファイルから各モジュールを個別にインポートする代わりに、1つProduct-Swiftをインポートするだけです。すべてのSwiftモジュールを集約した.h。

モジュールを個別にインポートする従来の方法を探して同じ問題に遭遇しましたが、XcodeとSwift 3の現在のバージョンでは、すべてのモジュールのインポートに1つのヘッダーのみを使用するように変更しました。

10
petershine

SwiftをObjective-Cプロジェクトにインポートする際に問題が発生しました。最後に、派生データフォルダーを調べて、Xcode 7が生成しているものを確認しました。ファイル名は私が期待していたものとは完全に異なっていました。

実際のファイル名を取得したら、それをインポートし、プロジェクトをビルドできました。

6
Josh B

モジュールの定義:はい、Obj-Cクラスの.mファイルに「ProjectName-Swift.h」をインポートします

これにより、Obj-cのSwiftクラスにアクセスできました。

2
YSR fan

この問題に1時間費やしました。次の手順に従うことで、不足しているものを理解するのに役立ちます。

  1. Xcode設定を開き、DerivedDataフォルダーに移動します
  2. Finderで「Swift.h」を検索します
  3. Project-Swift.hファイルが見つからない場合、このファイルは生成されていません。通常、@ objcをSwiftクラスの1つに追加してアプリを正常にビルドする必要があります。そうしないと、Xcodeはこのファイルを生成しません
  4. 「xxx-Swift.h」ファイルが見つかった場合は、インポート文に正しい名前が含まれていることを確認してください。

how-to-locate-Swift-file

2
Jakehao

開発中に、完全に実装されていないSwiftクラスがある可能性があり、そのために構文エラーが発生する可能性があります。 Swiftヘッダーファイルは、すべてのSwiftファイルにエラーがない場合にのみ使用できます。

Swiftファイルに構文エラーがないことを確認してから、目的の-cファイルにSwiftヘッダーをインポートしてください。

1
Gurunath Sripad

ヘッダーファイルのインポート、つまり.

#import "<ProjectName>-Swift.h" 

.hファイル内で次のようなエラーが生成されました。

-Swift.h 'ファイルが見つかりません

ビルドに失敗しました。

代わりに使用します:

#import "<ProjectName>-Swift.h"

.mファイル内で、同じエラーが表示されても、プロジェクトを実行するとエラーは抑制されます。

Swiftクラスは、.mファイル内で使用可能になります。

1
Claytog

Gitを使用してプロジェクトに取り組んでいたときに、私のチームで同じ問題に直面していました。ある開発者は、Xcodeを最新のSwift 2.2バージョンに必要な最後のバージョン(7.3)に更新していません。そのため、コンパイラは新しいSwift構文を認識せず、Swiftライブラリ(projectname-Swift.h)のインターフェイスを生成できませんでした。 Xcodeのバージョンが最新かどうかを確認してください!

1
Artem Loginov

プロジェクト(ターゲット)の名前に関する問題に直面しました。記号「-」が含まれていました。そのため、次は決定でした。プロジェクトの名前が「Test-App」の場合、インポートされるクラスの名前は「Test_App-Swift.h」です

0
opochtovy

Swiftコードが-Swift.hまたは@objcを介してAPIを公開する場合、@objcMembersはXcodeによって自動的に作成される必要があります

通常、場所は次のようになります

~/Library/Developer/Xcode/DerivedData/
  ProductModuleName-foo/
    Build/
      Intermediates.noindex/
        ProductModuleName.build/
          Debug-iphoneos/
            ProductModuleName.build/
              DerivedSources/
                ProductModuleName-Swift.h

変更することができます

Project editor -> select a target -> Build Settings -> Per-configuration Intermediate Build Files Path

デフォルトでは、値は$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)です

0
yoAlex5