Xcode で コーディング中に、エラー表示はされるが、ビルドするとエラーが消えて実行できるのに、またソースを修正するとエラー表示がされるという経験はないだろうか?エラーメッセージは以下のような感じだったりします。
Use of unresolved identifier 'MyManager'.
ちゃんとコードがプロジェクトに含まれている事を確認して、テストの為実行させると、エラーが消えて実行できたりする。どうなってんだろうと色々調べてみました。
Use of undeclared type” in Swift, even though type is internal, and exists in same module
http://stackoverflow.com/questions/25437891/use-of-undeclared-type-in-swift-even-though-type-is-internal-and-exists-in-s
質問の切り口は異なるかもしれませんが、問題の解決方法は同じでした。答えは、Target に Tests や UITests などがあった場合に、あるターゲットから特定の class などにアクセスできない場合にエラーになります。
エラーが発生している部分はこんな感じです。
MyManager
のコードの部分はこんな感じです。
つまり、エラーの出たコードの部分では、アプリ自体には MyManager
は含まれるが、Tests や UITests には MyManager
が含まれないので、「Use of unresolved identifier 'MyManager'
」と言われるというわけでした。そこで、Project から MyManager のソースを選んで、Tests と UITests のターゲット含めてあげれば(下図)、エラー表示は消えてくれます。
実は、この現象、過去にも時々発生して、その度毎にすったもんだしてこの答えにたどり着いて、わかっているつもりでしたが、今回もすっかり(しっかり)失念していましたので、備忘録として記録する事にします。
もっとも、今回のケースに該当しない要因も考えられますので、ご留意ください。
(注記)
エラーにならないケースもあるようなので、今後注意深く観察していきたいと思います。
(環境表記)
Xcode: Version 7.3 (7D175)
Apple Swift version 2.2 (swiftlang-703.0.18.1 clang-703.0.29)