web-dev-qa-db-ja.com

`po`は` error:<EXPR>:1:1:error:use of unresolved identifier`を返します

コンソールでpoにこの問題があり、関数を出力しようとすること自体は機能しますが、変数または定数を出力することはできません。

first result is for <code>po bar.boy()</code>, second says <code>unresolved</code>

ここで見ることができるように、var/letはbar.boy()のコンテンツを保持していると思いますが、Swift何とか見つけることができません...

55
StuFF mc

過去におそらくSwiftファイルを追加するときに、Bridgingヘッダーを追加/要求するが、プロジェクトにその行を追加しないというバグがありました。

Swift_OPTIMIZATION_LEVEL = "-Onone";

つまり、この状態に留まるということです

Swift_OPTIMIZATION_LEVEL fastest

その結果 error: <EXPR>:1:1: error: use of unresolved identifier

プロジェクト内のファイルを移動し、ObjCファイルをプロジェクトに追加すると、ブリッジングヘッダーについて尋ねられたので(それは既にありました!)、幸運なことにSwift_OPTIMIZATION_LEVEL。これは、デフォルト値がfastestであると考えるバグであると考えることができますが、これも過去のバグであり、修正されたと思います。

それでも、リリースビルドにnoneを追加すると、逆にバグになる可能性があります。私はこれをテストするためにDebugビルドしか持っていなかったので、今これをテストすることはできません。これは演習として残しておきます:) Appleのエンジニアのために。

51
StuFF mc

Swift Complierを「-O」に設定します

Swift_OPTIMIZATION_LEVEL = "-O";

それを「-Onone」に戻します。

Swift_OPTIMIZATION_LEVEL = "-Onone";

その後、動作します。

10
User9527

設定後に修正:

Optimization Level = None[-Onone] under Swift Compiler-Code Generation

Optimization Level under Apple LLVM 8.0-コード生成は効果がありません

4
Desmond DAI

バグは、コンパイル中にfooが最適化されており、そのシンボルがコンパイルされたコードにもう存在しないという事実によるものだと思います(デバッグにあるべきではなく、LLDBバグであっても)

おそらく次の行(printlnであっても)にfooの使用を追加すると、そのシンボルがIRに保持され、po foo

(それはまだバグであることに同意しますが、少なくともそれが機能する場合は、回避策と説明の感覚があります)

4
AliSoftware

同様の問題が発生しましたが、すでに正しい構成があり、すべての最適化はNoneに設定されていました。しかし、まだ値を取得できませんでした。

さらに掘り下げた後、Xcodeがタイプを解決できないことが原因であることがわかりました。

(lldb) frame variable self
<could not resolve type>

それがこの質問に私を導きました: xcode 8 Debugger 'Could not resolve type' ここで問題が説明され、ブリッジングヘッダーが問題を引き起こすようです。

プロジェクトにブリッジングヘッダーがないため、ビルド設定をもう一度調べて、この設定を見つけました

setting[1]

これは最初はYESに設定されていました。 itをNOシンボルに変更すると、再び機能します。

Swift_INSTALL_OBJC_HEADER = NO

3
snod

プロジェクトでSwiftを使用している場合、プロジェクト/ターゲット構成には2つの個別の「最適化レベル」設定があります。 「Swift_OPTIMIZATION_LEVEL」だけではありません。このリンクを確認してください: https://stackoverflow.com/a/32984193/206018

誰かに役立つ場合に備えて、ここに残しておきます。

0
Ricardo Anjos