Swift Playground 未显示错误

Posted

技术标签:

【中文标题】Swift Playground 未显示错误【英文标题】:Swift Playground not showing errors 【发布时间】:2017-04-05 21:14:52 【问题描述】:

我开始使用 Swift 并在 macOS 的 Swift Playgrounds 中使用教程。

所以示例代码是

var str = "Hello, playground"
str
str1

我在 str 1 上没有收到任何红色错误信息。只是控制台崩溃了

Playground execution failed: error: MyPlayground.playground:1:1: 
error: use of unresolved identifier 'str1'
str1
^~~~


* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
   * frame #0: 0x0000000102157360 com.apple.dt.Xcode.PlaygroundStub-macosx`executePlayground
     frame #1: 0x000000010215522a com.apple.dt.Xcode.PlaygroundStub-macosx`-[PlaygroundViewBridgeService execute] + 90

如果我更正了代码,那么 Playground 会刷新并显示新数据,它只是没有报告错误

如何阻止 Xcode 崩溃并按照记录的方式运行?

Xcode 版本 8.3 (8E162) macOS 10.12.4

我已尝试删除所有 Xcode 文件(包括它在构建期间创建的文件)并重新安装并使用其他用户

【问题讨论】:

您可以通过在bugreport.apple.com提交错误报告来阻止 Xcode 崩溃并使其按预期运行 @Pallie - 据报道,一年多以来,Apple 讨论组连同一个错误被拒绝为重复。人们是如何解决这个已知错误的? 您可以通过分析错误消息来解决问题,该错误消息准确地说明了问题所在以及问题发生在哪一行。您可以在 Xcode 的首选项中启用行号(Text Editing>Editing>Show line numbers)。 其他人都是这样做的吗? 可能。我没有遇到过这个确切的问题,但我会这样做。 【参考方案1】:

实际上 Playground 确实会显示“代码左侧的红色标记错误”,并且还有一个自动选项来修复错误,就像常规项目一样。

我遇到了和你一样的问题(左边没有出现红色标记)。为我解决了什么:

    右键单击问题导航器上的错误(左上面板) 在菜单上 > 打开方式 > 快速查看 然后再次执行相同的命令并打开为 > Playground Page

我使用的是 Xcode 8.3.2

更新:同样适用于 Xcode 9.0

【讨论】:

不适合我,它不会显示这个。大多数时候都很好。有时,会话中的第一个或两个错误会显示红色图标,然后文本永远不会出现,除非您单击一些东西。如前所述,这是一个已知的 Apple 错误。 谢谢。 Xcode 中出现此类修复的奇怪问题的数量有点令人担忧。 嘿猜猜谁回来了...对我有用的是,再犯一个更“明显”的错误(!),希望它触发红色标记 - 现在恰好可以工作。伙计,这就是每个人制作 ios 应用程序的方式吗?我感觉很糟糕...... Xcode 10.1 仍然是同样的问题。错误显示了一段时间然后爆炸,无法浏览错误。【参考方案2】:

在问题导航器中,右键单击错误 -> 以快速查看方式打开,然后将其重新选择为以 Playground 方式打开。它对我有用。

【讨论】:

要重申,在Issue Navigator / Buildtime,上下文菜单:Open As -> Quick Look,然后Open As -> Playground 应该强制解决方法来刷新在行号处标记的错误的显示。【参考方案3】:

文件 -> 游乐场设置 检查显示源代码的实时问题 选择显示所有问题单选按钮

Xcode 实际上,截至 2017 年 3 月,在 Playground 中显示内联错误,就像在项目中编辑文件时一样。这种行为在最近的更新中发生了变化,尽管我没有看到它记录在案。我认为这是最新补丁引入的错误,或者可能更改了默认设置,可以将其更改回来。

编辑:其实我只是打开了一个我在补丁前创建的游乐场,错误显示内联

设置是

【讨论】:

【参考方案4】:

有时此功能有效,但通常无效。 Xcode 8.3.3 的这个功能有很多 bug,让我避免使用 Playgrounds。

这是在 Xcode 9 Beta 6 中运行时的屏幕:

退出并重新打开 Xcode 似乎有助于让它再次工作,但在我试验代码时,这些工具似乎很容易混淆。

当我弄乱了导致问题的代码时,Playgrounds 将停止尝试重新编译,然后我得到一个陈旧的反馈循环,并且不知道代码是否正常工作。

...在我有一个在 Xcode 9 Beta 6 中运行的 Playground 后不久,它就停止了工作。错误停止显示内联,所以我建议在http://bugreport.apple.com 提交更多错误报告

【讨论】:

哦,是的,但是让我们看看你在 my 家中的样子! :) 我将很难做到这一点,因为 Playgrounds 有这么多车。我需要提交更多错误报告...关闭并打开 Xcode,开始一个新的 Playground...尝试不同的东西?【参考方案5】:

删除派生数据并退出 Xcode 对我有用。

【讨论】:

【参考方案6】:

您看到的是正确的行为。如果您希望代码中包含“红色标记”,请使用真实项目。 Playgrounds 不会显示所有错误,如果它们确实显示它们,它们会按照您的描述显示它们,在控制台中,首先显示您在“红色标记”中得到的相同消息,然后显示相当无意义的崩溃日志。 (崩溃的不是 Xcode,而是特殊的 Playground 执行过程。)

所以,这就是你在操场上看到的:

这是你看到的应用项目:

【讨论】:

当你遇到错误时,Playground 就没有用了吗? 在 20:40 Apple 的 WWDC 视频中,他在左侧显示了一个红色标记,然后单击给出了错误。我一点都不红 Xcode 9 Beta 6 似乎解决了这个问题。我从来没有经常使用 Playgrounds,因为错误很难找到,而且在 Xcode 8.3.3 中,据我所知,它并没有显示内联。这可能是一个错误,但我总是发现 Playgrounds 做任何严肃的工作都令人沮丧。制作一个 macOS 终端应用程序或一个 iPhone 应用程序似乎是可行的方法,macOS 终端会给你一些感觉就像一个游乐场,除了它会提供你在 Xcode 8.3.3 中期望的所有错误内联帮助。 @PaulSolt 我正在使用 Xcode 9 Beta 6,但我看不出它如何“解决这个问题”。这就像我的游乐场屏幕截图,而不像我的应用程序屏幕截图。无论设置等如何,源代码中都不会出现问题标记。 @matt 实际上,这仍然是 Xcode 9 beta 6 中的超级错误。有时它可以工作,但有时它似乎编译器阻塞并停止提供有用的反馈。关闭 Xcode 并重新打开似乎让它再次工作(暂时)

以上是关于Swift Playground 未显示错误的主要内容,如果未能解决你的问题,请参考以下文章

swift playground / deinit 中的内存泄漏未一致调用

在 Swift 4 Playground 中使用外部库

尝试使用 Apple 的 Playground Book 模板时出错

Swift Playground 显示错误的语句执行次数(数组上的 forEach)

未安装 Swift Playground

swift3 Playground 未能获得路径的沙盒扩展