コンソールでpo
にこの問題があり、関数を出力しようとすること自体は機能しますが、変数または定数を出力することはできません。
ここで見ることができるように、var/letはbar.boy()
のコンテンツを保持していると思いますが、Swift何とか見つけることができません...
過去におそらくSwiftファイルを追加するときに、Bridgingヘッダーを追加/要求するが、プロジェクトにその行を追加しないというバグがありました。
Swift_OPTIMIZATION_LEVEL = "-Onone";
つまり、この状態に留まるということです
その結果 error: <EXPR>:1:1: error: use of unresolved identifier
!
プロジェクト内のファイルを移動し、ObjCファイルをプロジェクトに追加すると、ブリッジングヘッダーについて尋ねられたので(それは既にありました!)、幸運なことにSwift_OPTIMIZATION_LEVEL
。これは、デフォルト値がfastest
であると考えるバグであると考えることができますが、これも過去のバグであり、修正されたと思います。
それでも、リリースビルドにnone
を追加すると、逆にバグになる可能性があります。私はこれをテストするためにDebug
ビルドしか持っていなかったので、今これをテストすることはできません。これは演習として残しておきます:) Appleのエンジニアのために。
Swift Complierを「-O」に設定します
Swift_OPTIMIZATION_LEVEL = "-O";
それを「-Onone」に戻します。
Swift_OPTIMIZATION_LEVEL = "-Onone";
その後、動作します。
設定後に修正:
Optimization Level = None[-Onone]
under Swift Compiler-Code Generation
Optimization Level
under Apple LLVM 8.0-コード生成は効果がありません
バグは、コンパイル中にfoo
が最適化されており、そのシンボルがコンパイルされたコードにもう存在しないという事実によるものだと思います(デバッグにあるべきではなく、LLDBバグであっても)
おそらく次の行(printlnであっても)にfoo
の使用を追加すると、そのシンボルがIRに保持され、po foo
(それはまだバグであることに同意しますが、少なくともそれが機能する場合は、回避策と説明の感覚があります)
同様の問題が発生しましたが、すでに正しい構成があり、すべての最適化はNone
に設定されていました。しかし、まだ値を取得できませんでした。
さらに掘り下げた後、Xcodeがタイプを解決できないことが原因であることがわかりました。
(lldb) frame variable self
<could not resolve type>
それがこの質問に私を導きました: xcode 8 Debugger 'Could not resolve type' ここで問題が説明され、ブリッジングヘッダーが問題を引き起こすようです。
プロジェクトにブリッジングヘッダーがないため、ビルド設定をもう一度調べて、この設定を見つけました
これは最初はYES
に設定されていました。 itをNO
シンボルに変更すると、再び機能します。
Swift_INSTALL_OBJC_HEADER = NO
プロジェクトでSwiftを使用している場合、プロジェクト/ターゲット構成には2つの個別の「最適化レベル」設定があります。 「Swift_OPTIMIZATION_LEVEL」だけではありません。このリンクを確認してください: https://stackoverflow.com/a/32984193/206018
誰かに役立つ場合に備えて、ここに残しておきます。