Objective-Cで開始されたプロジェクトがあり、以前にObjective-Cを作成したのと同じクラスファイルにいくつかのSwiftコードをインポートしようとしています。
同じプロジェクトでAppleとObjective-C、およびSwiftの使用に関するSO docs を参照しました 質問 このようですが、まだ利用できません:#import "NewTestApp-Swift.h"
(NewTestApp
は製品とモジュールの名前です)を入力した後、ファイルが見つかりませんというエラーが引き続き発生します。
これが私がこれまでに行ったことです。
Define Modules
で、アプリのYES
を選択しました。#import "NewTestApp-Swift.h"
、ViewController.m
、およびViewController.h
内でAppDelegate.m
を使用しようとしましたが、いずれも機能していません。
私は間違って他に何をしていますか?ご協力いただきありがとうございます。
設定のスクリーンショット:
現在発生しているエラー:
私は同じ問題にぶつかり、プロジェクトを取得してSwiftをobj-cクラスにインポートできませんでした。 Xcode 6を使用して(Xcode 6以降で動作するはずです)、この方法で実行できました。
@class MySwiftClass;
#import "ProductModuleName-Swift.h"
Appleドキュメントへのリンク
Swiftコードがモジュール内にある場合(あなたの場合のように):
#import <ProductName/ProductModuleName-Swift.h>
Swiftコードがプロジェクト内にある場合(SwiftとObjCが混在):
#import <ProductModuleName-Swift.h>
あなたの場合、*。mファイルに次の行を追加する必要があります。
#import <NewTestApp/NewTestApp-Swift.h>
重要:importステートメントの「<」を見てください
どのようにしてSwiftをObjective-cにインポートしたか:
ViewController.mでSwiftコードをインポートします:
#import "MyProductModuleName-Swift.h"
このパズルの最後の部分については、既存のSwiftファイルをプロジェクトにドラッグアンドドロップするだけでなく、実際にSwiftファイルを実際にXcode GUIで追加することを認識させてくれたSwiftoverloadに感謝します: http://nikolakirev.com/blog/using-Swift-in-objective-c-project
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つのヘッダーのみを使用するように変更しました。
SwiftをObjective-Cプロジェクトにインポートする際に問題が発生しました。最後に、派生データフォルダーを調べて、Xcode 7が生成しているものを確認しました。ファイル名は私が期待していたものとは完全に異なっていました。
実際のファイル名を取得したら、それをインポートし、プロジェクトをビルドできました。
モジュールの定義:はい、Obj-Cクラスの.mファイルに「ProjectName-Swift.h」をインポートします
これにより、Obj-cのSwiftクラスにアクセスできました。
開発中に、完全に実装されていないSwiftクラスがある可能性があり、そのために構文エラーが発生する可能性があります。 Swiftヘッダーファイルは、すべてのSwiftファイルにエラーがない場合にのみ使用できます。
Swiftファイルに構文エラーがないことを確認してから、目的の-cファイルにSwiftヘッダーをインポートしてください。
ヘッダーファイルのインポート、つまり.
#import "<ProjectName>-Swift.h"
.hファイル内で次のようなエラーが生成されました。
-Swift.h 'ファイルが見つかりません
ビルドに失敗しました。
代わりに使用します:
#import "<ProjectName>-Swift.h"
.mファイル内で、同じエラーが表示されても、プロジェクトを実行するとエラーは抑制されます。
Swiftクラスは、.mファイル内で使用可能になります。
Gitを使用してプロジェクトに取り組んでいたときに、私のチームで同じ問題に直面していました。ある開発者は、Xcodeを最新のSwift 2.2バージョンに必要な最後のバージョン(7.3)に更新していません。そのため、コンパイラは新しいSwift構文を認識せず、Swiftライブラリ(projectname-Swift.h)のインターフェイスを生成できませんでした。 Xcodeのバージョンが最新かどうかを確認してください!
プロジェクト(ターゲット)の名前に関する問題に直面しました。記号「-」が含まれていました。そのため、次は決定でした。プロジェクトの名前が「Test-App」の場合、インポートされるクラスの名前は「Test_App-Swift.h」です
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)
です