私はSwiftでライブラリを書きましたが、Objective-Cで書かれた現在のプロジェクトにインポートすることができませんでした。
インポートする方法はありますか?
#import "SCLAlertView.Swift" - 'SCLAlertView.Swift' file not found
TargetName-Swift.h
をインポートする必要があります。それがターゲット名であることに注意してください - 他の答えはクラス名を使用するのを間違えます。
この単一のファイルは、@objc
でアノテーションが付けられた、またはNSObject
から継承された、プロジェクト内のすべてのSwiftクラスのObjective-Cインターフェイスを定義する自動生成されたヘッダーです。
考慮事項:
ターゲット名にスペースが含まれている場合は、それらをアンダースコアに置き換えます(例:My Project
はMy_Project-Swift.h
になります)
ターゲットがフレームワークの場合は、<TargetName/TargetName-Swift.h>
をインポートする必要があります。
あなたのSwiftファイルがターゲットのメンバーであることを確認してください
アップルのWebサイトからの指示:
同じフレームワークからObjective-CにSwiftコードをインポートするには
パッケージ設定 の ビルド設定 で、そのフレームワークターゲットの 定義モジュール 設定が はい に設定されていることを確認します。次の構文を使用し、適切な名前を代入して、そのフレームワークターゲットからそのフレームワークターゲット内の任意のObjective-C .mファイルにSwiftコードをインポートします。
#import "ProductName-Swift.h"
改訂:
インポートできるのは "ProductName-Swift.h" .mファイルのみです。
ターゲットのSwiftファイルは、このimport文を含むObjective-Cの.mファイルに表示されます。
循環参照を避けるために、SwiftをObjective-Cのヘッダファイルにインポートしないでください。代わりに、SwiftクラスをObjective-Cヘッダで使用するように前方宣言することができます。 Objective-CではSwiftクラスをサブクラス化することはできません。
何をするか:
Objective-Cで新しいプロジェクトを作成する
新しい.Swift
ファイルを作成する
Xcode Projectファイルをクリックします
をクリックしてください - ビルド設定
検索バー を検索し、 /モジュール定義 を検索します。
値を はい に変更します。
製品モジュール名 。
値をプロジェクトの名前に変更します。
Appデリゲートで、以下を追加します。#import "YourProjectName-Swift.h"
注: /あなたがあなたのSwiftファイルを使用したい時はいつでもあなたは次の行をインポートしなければなりません:
#import "YourProjectName-Swift.h"
プロジェクトファイルのビルド設定に移動し、 "Objective-Cで生成されたインターフェイスのヘッダー名 。 を検索します。そのプロパティの値は含める必要がある名前です。
"Product Module Name"プロパティ(上記のプロパティがデフォルトで依存しているもの)がtest/debug/release/etc用にコンパイルされているかどうかによって異なる場合は(この場合のように)カスタム名を設定することによるバリエーション。
Objective-c
内にSwift
ファイルをインポートすると、正しくimport
されていない場合、このエラーが発生する可能性があります。
注:Swiftファイルを外部からインポートする必要はありません。Swiftファイルを処理するファイルを1つインポートするだけで済みます。
Swiftファイルを作成/コピーした場合 inside Objective-Cプロジェクト 。それは自動的にブリッジングヘッダを作成したでしょう。
Objective-C Generated Interface Header Name
でTargets -> Build Settings
を確認してください。
以上を踏まえて、KJExpandable-Swift.h
をそのままインポートします。
あなたのものはTargetName-Swift.h
になります、ここでTargetName
はあなたのプロジェクト名またはあなたがそれに追加して実行しているかもしれない別のターゲットによって異なります。
最初のステップ: -
プロジェクトターゲット - >ビルド設定 - >検索( '定義') - > モジュール定義 更新値 いいえ to はい
"モジュールの定義": _ yes _ 。
"常にSwift標準ライブラリを埋め込む": _ yes _ 。
"Objective-C互換ヘッダのインストール": _ yes _ 。
第2ステップ: -
Objective C ".h"ファイルにSwiftファイルクラスを追加
#import <UIKit/UIKit.h>
@class TestViewController(Swift File);
@interface TestViewController(Objective C File) : UIViewController
@end
Objective Cの ".m"ファイルに 'ProjectName(あなたのプロジェクト名)-Swift.h'をインポートします。
//TestViewController.m
#import "TestViewController.h"
/*import ProjectName-Swift.h file to access Swift file here*/
#import "ProjectName-Swift.h"
SwiftのコードをObjective-Cのファイル に同じ フレームワーク内でインポートする場合、注意点が1つあります。あなたはフレームワーク名と山括弧を指定することでそれをしなければなりません:
#import <MyFramework/MyFramework-Swift.h>
ここでのMyFramework
は、 "Product Module Name"ビルド設定(PRODUCT_NAME = MyFramework
)です。
#import "MyFramework-Swift.h"
を追加するだけではうまくいきません。 (このような#import
が追加される前に、ターゲットにいくつかのSwiftコードを使用して少なくとも1回正常にビルドされた)build productsディレクトリをチェックしても、Headers
ディレクトリにファイルMyFramework-Swift.h
があるはずです。
Swift 4でプロジェクトを作成してからObjective-Cファイルを追加した場合は、次のようにします。
@objcMembers
public class MyModel: NSObject {
var someFlag = false
func doSomething() {
print("doing something")
}
}
参照先: https://useyourloaf.com/blog/objc-warnings-upgrading-to-Swift-4/ /
同じプロジェクトのSwiftとObjective Cに関するプレリリースノートをチェックしてください。
インポートしているはずです
#import "SCLAlertView-Swift.h"
"Objective-Cで生成されたインタフェースヘッダ名" を構築しようとしているターゲットのBuild Settingsで検索し(MyApp-Swift.h
とします)、この設定の値(#import "MyApp-Swift.h"
)をソースファイルにインポートします。あなたはあなたのSwift APIにアクセスしようとしています。
このフィールドのデフォルト値は$(Swift_MODULE_NAME)-Swift.h
です。 [Objective-C Generated Interface Header Name]設定の値フィールドをダブルクリックすると表示されます。
また、モジュール名にダッシュがある場合(My-App
としましょう)、$(Swift_MODULE_NAME)
ではすべてのダッシュがアンダースコアに置き換えられます。そのため、#import "My_App-Swift.h"
を追加する必要があります。
Swift ファイルを Objective-C classに使用したい場合は、Xcode 8以降、以下の手順に従うことができます。
Objective-Cでプロジェクトを作成した場合
それをコンパイルし、それが次のようなリンカーエラーを生成するならば:アーキテクチャx86_64またはarmv 7のために以前のファイル(2.0)より新しいバージョンのSwift言語(3.0)でコンパイル
あなたにもう1つの変更を加えなさい
ビルドして実行します。
#import <TargetName-Swift.h>
キーボードから#import <を入力すると、Xcodeが自動的にアドバイスを表示します。