`po` gives `error: <EXPR>:1:1: error: use of unresolved identifier`

`po` gives `error: <EXPR>:1:1: error: use of unresolved identifier`

我在控制台中遇到 po 的问题,尝试输出函数本身有效,但输出变量或常量却不行。

正如您在这里看到的,虽然您认为 var/let 包含 bar.boy() 的内容,但 Swift 不知何故找不到它...

我敢打赌这个错误是由于 foo 在编译过程中被优化了,它的符号在编译代码中不再存在(即使它不应该在调试中,它仍然是一个 LLDB 错误)

可能如果你在下一行(甚至是 println)中添加一些 foo 的用法,它的符号将有望保留在 IR 中,你将能够 po foo

(我同意这仍然是一个错误,但至少如果它有效,你会有一个解决方法和一些解释)

所以事实证明过去可能存在一个错误,当您添加 Swift 文件时,它会 add/ask 桥接 header,但不会添加该行到您的项目

SWIFT_OPTIMIZATION_LEVEL = "-Onone";

这意味着你将保持这种状态

导致 error: <EXPR>:1:1: error: use of unresolved identifier

我只能找到它,因为我在我的项目中四处移动文件,当我将 ObjC 文件添加到项目中时,它询问我桥接 header(尽管我已经有一个!)幸运的是补充说 SWIFT_OPTIMIZATION_LEVEL。考虑到默认值为 fastest,人们可能会认为这是一个错误,但我又猜想这只是过去的一个错误,现在已修复。

不过,我现在修复了,如果它在发布版本中添加 none,则它可能是一个错误。我现在无法测试这个,因为为了测试这个我只有一个 Debug 构建。我会把它留作 Apple 工程师的练习:)。

我将 Swift Complier 设置为“-O”

SWIFT_OPTIMIZATION_LEVEL = "-O";

并将其设置回“-Onone”。

SWIFT_OPTIMIZATION_LEVEL = "-Onone";

然后就可以了。

设置后修复:

Optimization Level = None[-Onone]Swift 编译器下 - 代码生成

请注意 Apple LLVM 8.0 - 代码生成 下的设置 Optimization Level 无效

如果您的项目正在使用 Swift,project/target 配置中有两个单独的 "Optimization Level" 设置。它不仅 "SWIFT_OPTIMIZATION_LEVEL"。检查此 link:

我会把它留在这里以防它对某人有用。

我遇到了类似的问题,但我已经有了正确的配置,所有优化都设置为 None。但是我仍然没有得到任何值。

经过进一步挖掘,我发现问题源于 Xcode 无法解析类型:

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

这让我想到了这个问题:xcode 8 Debugger 'Could not resolve type' 问题的描述和桥接 header 似乎引起了问题。

我的项目没有任何桥接 headers 我再次研究了构建设置并找到了这个设置

最初设置为 YES。将它更改为 NO 后,符号再次起作用。

SWIFT_INSTALL_OBJC_HEADER = NO

对于那些在 Objective-c 项目中使用 Swift 框架,并想调试该项目中的 Swift 源文件的人:(在我的例子中,我有一个混合 -由 Cocoapods 管理的语言模块,我需要在我的 Objective-c 示例项目中调试 swift 模块)

在我 在我的 Objective-c 项目中添加一个空 Swift 文件后,它对我有用。

否则,那些 swift 编译器选项将不会显示在构建设置中。