私はSwiftでライブラリを作成しましたが、Objective-Cで作成した現在のプロジェクトにインポートできませんでした。
それをインポートする方法はありますか?
#import "SCLAlertView.swift" - 'SCLAlertView.swift' file not found
私はSwiftでライブラリを作成しましたが、Objective-Cで作成した現在のプロジェクトにインポートできませんでした。
それをインポートする方法はありますか?
#import "SCLAlertView.swift" - 'SCLAlertView.swift' file not found
回答:
インポートする必要がありTargetName-Swift.h
ます。それがターゲット名であることに注意してください-他の答えはクラス名の使い方を間違えます。
この単一のファイルは自動生成ヘッダーであり、アノテーションが付けられているか@objc
、から継承されている、プロジェクト内のすべてのSwiftクラスのObjective-Cインターフェースを定義しますNSObject
。
考慮事項:
あなたのターゲット名にスペースが含まれている場合は、(例えばアンダースコアに置き換えるMy Project
となりMy_Project-Swift.h
)
ターゲットがフレームワークの場合、インポートする必要があります <TargetName/TargetName-Swift.h>
Swiftファイルがターゲットのメンバーであることを確認してください
アップルのウェブサイトからの指示:
同じフレームワークからObjective-CにSwiftコードをインポートするには
下にビルド設定で梱包、確認してください定義モジュール そのフレームワーク目標の設定に設定されてはい。この構文を使用し、適切な名前に置き換えて、そのフレームワークターゲットからそのフレームワークターゲット内のObjective-C .mファイルにSwiftコードをインポートします。
#import "ProductName-Swift.h"
リビジョン:
.mファイルの「ProductName-Swift.h」のみをインポートできます。
ターゲットのSwiftファイルは、このインポートステートメントを含むObjective-C .mファイルに表示されます。
循環参照を避けるために、SwiftをObjective-Cヘッダーファイルにインポートしないでください。代わりに、Swiftクラスを転送宣言してObjective-Cヘッダーで使用できます。Objective-CではSwiftクラスをサブクラス化できないことに注意してください。
NSObject
!!! あなたはまっすぐclass Blah
に迅速に宣言してそれを機能させることはできません。それはする必要がありますclass Blah : NSObject
ここでは何をすべきかです:
Objective-Cで新しいプロジェクトを作成する
新しい.swift
ファイルを
作成する
Xcodeプロジェクトファイルをクリックします。
ビルド設定をクリックします
検索バーを見つけ、Defines Modulesを検索します。
値をYesに変更します。
製品モジュール名を検索します。
値をプロジェクトの名前に変更します。
アプリデリゲートで、以下を追加します。 #import "YourProjectName-Swift.h"
注: Swiftファイルを使用する場合は、次の行をインポートする必要があります。
#import "YourProjectName-Swift.h"
Defines module
in の値をBuild settings
toに変更することは、Yes
私にとって固定されたものです。
YourProjectName
内の#import "YourProjectName-Swift.h"
プロジェクト名に特殊文字が含まれている場合に便利なステップ8からのプロジェクトの名前になりますと、あなたはあなたがそれをフォーマットする必要があります正確にどのようにではありません。
プロジェクトファイルのビルド設定に移動し、「Objective-C Generated Interface Header Name」を検索します。そのプロパティの値は、含める必要がある名前です。
「製品モジュール名」プロパティ(上記のプロパティがデフォルトで依存するプロパティ)が(私の場合のように)テスト/デバッグ/リリースなどでコンパイルするかどうかによって異なる場合は、このプロパティをそのプロパティから独立させます。カスタム名を設定することによるバリエーション。
Swift
内部にファイルをインポートObjective-c
すると、import
適切に機能しない場合にこのエラーが発生する可能性があります。
注:Swiftファイルを外部からインポートする必要はありません。Swiftファイルを処理する1つのファイルをインポートするだけです。
Objective-Cプロジェクト内でSwiftファイルを作成/コピーしたとき。ブリッジヘッダーが自動的に作成されます。
で確認Objective-C Generated Interface Header Name
してくださいTargets -> Build Settings
。
以上を踏まえKJExpandable-Swift.h
、そのままインポートします。
あなたのは次のようになりますTargetName-Swift.h
場合は、TargetName
プロジェクト名または別のターゲットに基づいて異なり、あなたが追加され、その上で動作している場合があります。
最初の一歩:-
[プロジェクトのターゲット- >ビルド設定- >検索(「定義」) - > モジュール定義 更新値いいえにはい
「モジュールの定義」:はい。
「常にSwift標準ライブラリを埋め込む」:はい。
「Objective-C互換性ヘッダーのインストール」:はい。
第二段階:-
以下のように、Objective C ".h"ファイルにSwiftファイルクラスを追加します。
#import <UIKit/UIKit.h>
@class TestViewController(Swift File);
@interface TestViewController(Objective C File) : UIViewController
@end
Objective C ".m"ファイルに 'ProjectName(Your Project Name)-Swift.h'をインポートします
//TestViewController.m
#import "TestViewController.h"
/*import ProjectName-Swift.h file to access Swift file here*/
#import "ProjectName-Swift.h"
同じフレームワーク内の Objective-CファイルにSwiftコードをインポートする場合は、注意点が1つあります。フレームワーク名と山かっこを指定してそれを行う必要があります:
#import <MyFramework/MyFramework-Swift.h>
MyFramework
これが「製品モジュール名」のビルド設定です(PRODUCT_NAME = MyFramework
)。
単に追加#import "MyFramework-Swift.h"
するだけでは機能しません。ビルドされた製品ディレクトリをチェックすると(そのような#import
が追加される前で、ターゲットにSwiftコードが含まれているビルドが1つ以上成功している場合)、ディレクトリにファイルが表示さMyFramework-Swift.h
れますHeaders
。
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"
The name of this header is your product module name followed by adding "-Swift.h".
たクラス名ではなく、製品モジュールの名前であり、特定のファイルだけでなく、すべてのSwiftファイルのインポートを処理します
ビルドしようとしているターゲットのビルド設定で「Objective-C Generated Interface Header Name」を検索し(そうだとしましょう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クラスで使用する場合は、Xcode 8以降、以下の手順に従います。
Objective-Cでプロジェクトを作成した場合:
それをコンパイルし、それが次のようなリンカーエラーを生成する場合:アーキテクチャx86_64またはarmv 7の以前のファイル(2.0)よりも新しいバージョンのSwift言語(3.0)でコンパイル
あなたのもう一つの変更を行います
ビルドして実行します。
プロジェクト内で.PCHファイルを見つけます。#import "YourProjectName-Swift.h"
これを追加します。 これにより、クラスヘッダーがインポートされます。特定のファイルにインポートする必要がないように。
#ifndef __IPHONE_3_0
#warning "This project uses features only available in iPhone SDK 3.0 and later."
#endif
#ifdef __OBJC__
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "YourProjectName-Swift.h"
#endif