Swiftで記述されたCustomViewControllerクラスと、ObjectiveCで記述されたCustomNavigationControllerクラスがあります。CustomNavigationControllerをプロパティとしてCustomViewControllerに追加しようとしています。#import "CustomNavigationController.h"
を追加しました。私のブリッジヘッダーに。
私のCustomViewControllerには次のものがあります。
class CustomViewController: UIViewController {
var navController: CustomNavigationController?
...
//init methods
...
override func viewDidLoad() {
super.viewDidLoad()
//Set up Navigation Controller
navController = self.storyboard.instantiateViewControllerWithIdentifier("CustomNavigationController") as CustomNavigationController!
}
ビルドして実行しようとするまでエラーはありません...「不明なタイプ名 'CustomNavigationController';意味は 'UINavigationController'ですか?」
タイプを認識しない理由を誰かが知っていますか?
Objective-Cコードでは、自動生成された-Swift.h
ヘッダーをどこかにインポートしています。その同じコードで、beforeその#import
行に、#import "CustomNavigationController.h"
を挿入します。これらの2つの#import
ステートメントの順序は非常に重要です。
これは、CustomNavigationControllerが自動生成された-Swift.h
ヘッダーの前に名前空間にあることを確認することで問題を解決します。したがって、後者は前者を認識し、すべてがうまくいきます。
これは、Objective-CクラスがCustomNavigationControllerについて知る必要がなかった場合は少し厄介ですが、今後の問題を解決し、ハイブリッドプロジェクトでの作業を継続できるようにします。
ProjectName-Swift.h
で生成されたヘッダーファイルにはProjectName-Bridging-Header.h
の内容が自動的に含まれていないようです。これにより、ProjectName-Swift.h
をインポートする前にまだ宣言されていない型は、コンパイラでUnknown type name
エラーをスローします。これはバグのようです。
私の回避策は、エラーの原因となっているクラスを前方宣言するProjectName-Swift.h
の代替バージョンを作成してから、ProjectName-Swifth.h
をインポートすることでした。私はそれをProjectName-Swift-Fixed.h
と呼んだ。私にとって、ProjectName-Swift-Fixed.h
は次のようになりました:
// ProjectName-Swift-Fixed.h
@class CustomViewController;
#import "ProjectName-Swift.h"
次に、#include "ProjectName-Swift.h"
があったコードのどこでも、それを#include "ProjectName-Swift-Fixed.h"
に置き換えました。
上記の回答で提案されているように#import
ステートメントの順序を変更しても問題を解決できない場合は、ProjectName-Bridging-Header.h
内のファイルでフレームワークのインポートが欠落していないかどうかを確認すると機能する場合があります。
私の場合、ブリッジヘッダーファイルに、そのメソッドの1つでUIImage
を使用しているクラスがありました。私のプロジェクトがObjective-Cのみで構成されていて正常に機能したが、このヘッダーをSwiftに公開した場合、エラーを削除するために#import <UIKit/UIKit.h>
を追加する必要がありました。
これを試して:
navController = self.storyboard.instantiateViewControllerWithIdentifier("CustomNavigationController") as? CustomNavigationController
私は同じ状況に遭遇しました。私の場合、Swiftバージョンを3.0に更新した後に解決されたエラーすべてのターゲット編集>変換>現在にSwift構文。 それが役に立てば幸い