`po` 出现错误:`<EXPR>:1:1: error: use of unresolved identifier`。

64
我在控制台上使用po命令时,发现输出函数本身可以正常工作,但输出变量或常量则不行。

正如您在这里看到的那样,尽管您认为变量/常量包含bar.boy()的内容,但 Swift 似乎无法找到它...
7个回答

64

事实证明,过去可能存在一个错误,当您添加Swift文件时,它会添加/要求桥接标头,但不会将该行添加到您的项目中。

SWIFT_OPTIMIZATION_LEVEL = "-Onone";

这意味着你会停留在这种状态。

SWIFT_OPTIMIZATION_LEVEL fastest

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

我只能发现这是因为我在项目中移动文件时,当我向项目添加ObjC文件时,它问我关于桥接头(尽管我已经有一个!),并幸运地添加了SWIFT_OPTIMIZATION_LEVEL。有人可以考虑将默认值视为fastest,但反过来可能是一个bug,如果在发布版本中添加了none。我现在无法测试这个问题,因为我只有一个Debug构建来测试这个问题。我将把这留给苹果工程师 :)。


1
所以问题确实是由于一个不必要的优化引起的;) ^^ - AliSoftware
52
即使我尝试了这些设置,仍然出现错误:/ - Loegic
10
谢谢。然而,我在 Xcode 8.0.0 中遇到了这个错误。优化设置为 -Onone。 - FreeNickname
4
我从 Swift 的第一天开始就遇到了这个问题,但直到今天才决定进行搜索。优化设置为无,但仍然会出现这种情况。这是相当随机的,项目中的某些地方可以正常工作。 - Cristi Băluță
如果您的项目包含另一个编译为框架的项目,请记得在那些项目中也进行更改。 - Eva Madrazo

16

我将 Swift编译器 设置为"-O"

SWIFT_OPTIMIZATION_LEVEL = "-O";

并将其设置回“-Onone”。

SWIFT_OPTIMIZATION_LEVEL = "-Onone";

然后它就可以工作了。


6

设置后修复:

Swift编译器 - 代码生成下的优化级别 = 无[-Onone]

请注意,在Apple LLVM 8.0 - 代码生成下设置优化级别没有任何效果。


4
我敢打赌,这个 bug 是由于在编译过程中优化掉了 foo,并且它的符号在编译后的代码中不存在(即使在调试模式下也不应该存在这种情况,这仍然是 LLDB 的一个 bug)。
可能如果在接下来的行中添加一些对 foo 的使用(甚至是 println),它的符号就会保留在 IR 中,然后你就可以使用 po foo
(我同意这仍然是一个 bug,但至少如果它能工作,你将有一个解决方法和一些解释。)

2
谢谢你的建议,但不是这个问题。我很确定这是我的项目出了问题,因为在另一个应用程序中相同的代码表现正常。 - StuFF mc

4

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

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

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

这引导我思考一个问题:xcode 8 Debugger 'Could not resolve type'。在这个问题描述中,桥接头文件似乎存在问题。
由于我的项目没有任何桥接头文件,我再次检查了构建设置并发现了这个设置: setting[1] 最初它被设置为YES。将其更改为NO后,符号再次正常工作。 SWIFT_INSTALL_OBJC_HEADER = NO

1
如果您的项目使用Swift,则在项目/目标配置中有两个单独的“优化级别”设置。不仅仅是“SWIFT_OPTIMIZATION_LEVEL”。请查看此链接:https://dev59.com/M1wY5IYBdhLWcg3wTWQu#32984193 如果对某人有用,我会把它留在这里。

0
对于那些在 Objective-C 项目中使用 Swift 框架并想要调试该项目中的 Swift 源文件的人来说(在我的情况下,我有一个由 Cocoapods 管理的混合语言模块,我需要在我的 Objective-C 示例项目中调试 Swift 模块),只需在我的 Objective-C 项目中添加一个空的 Swift 文件即可。否则,这些 Swift 编译器选项将不会显示在构建设置中。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接