在 Swift 中使用 Set 时出现编译器分段错误

Posted

技术标签:

【中文标题】在 Swift 中使用 Set 时出现编译器分段错误【英文标题】:Compiler segmentation fault while using Set in Swift 【发布时间】:2017-10-02 18:45:33 【问题描述】:

这段代码运行良好:

let lines = ["one", "one", "two"]
let lineSet = lines

但是在编译这个时:

let lines = ["one", "one", "two"]
let lineSet = Set(lines)

我明白了:

由于信号而导致命令失败:分段错误:11

我有 Xcode 版本 9.0 (9A235)。这真的是一个错误还是我只是做错了什么?

我现在的解决方法:

var lineSet = Set<String>()
let lines = ["one", "one", "two"]
lines.forEach  lineSet.insert($0) 

【问题讨论】:

你能生成一个minimal reproducible example吗? 您确定这就是您拥有的所有代码吗?您是否在新的游乐场或项目中尝试过这个?这绝对是您正在崩溃的线路还是可能是另一条线路? 您的错误示例对我来说编译得很好。 别忘了清除你的派生数据 编译器段错误总是是一个错误。 【参考方案1】:

构建lineSet 的更好、更惯用的方法很简单:

let lineSet: Set = ["one", "one", "two"] 

希望这可以解决您的编译器崩溃问题。不幸的是,我无法完全重现您的原始问题,因此我无法真正确认我的修复是否会有所不同;)

如前所述,删除您的 DerivedData 文件夹是个好主意(~/Library/Caches/com.apple.dt.Xcode 也可能有所帮助)。当 Xcode 开始出现异常行为时,这是一种有点标准的做法。

【讨论】:

【参考方案2】:

引用here 的 John Caswell 的话

编译器段错误总是是一个错误

根据我的经验,Playgrounds 有点问题。 XCode Playground 卡在“正在运行的游乐场”或“启动模拟器”上,然后无法运行代码。我不时遇到这样的错误,而其他人遇到了不可重现的问题:

XCode hangs every time when i write few lines of code in playground https://teamtreehouse.com/community/xcode-playground-gets-stuck-on-running-and-wont-run-the-code-what-to-do https://forums.bignerdranch.com/t/playground-hangs-frequently/7331 https://forums.developer.apple.com/thread/75045 failed to launch stub for playground execution Playground execution failed: error: Couldn't lookup symbols - Playground in xcode using swift https://ericasadun.com/2015/03/16/swift-working-around-sources-playground-bugs/

(虽然其中一些链接很旧,但 Playground 还没有那么成熟。)

通常,解决方法是关闭 Xcode,更改光标位置等。

因此,我要么使用https://repl.it/site/languages/swift,要么谨慎使用 Playground,要么使用最新的 Xcode(因为通常错误最少)。

编辑:

当我在我的 macbook air 和 macbook pro 上都使用 Xcode 9.4.1 时,Xcode 崩溃或只是停止在操场上工作。我的同事也是这样。有时即使我只是在 Chrome 中,Playground 也会崩溃!

有人告诉我,如果您打开实用程序,然后将您的平台从 ios 切换到 macOS,那么您可能能够解决 Playground 的冻结/挂起问题。但我还没有尝试过。

【讨论】:

我认为他最初的问题与 Playground 无关,但无论如何,我有点同意您关于 Playground 整体稳定性的评论;)

以上是关于在 Swift 中使用 Set 时出现编译器分段错误的主要内容,如果未能解决你的问题,请参考以下文章

获取 QString 时出现分段错误

分段错误:使用 yosys 编译时出现 11

运行 C++ 代码时出现分段错误

扩展 UIViewControllerAnimatedTransitioning 时出现分段错误

返回指针时出现分段错误

为啥在编译我的代码C(linux)时出现分段错误(核心转储)[关闭]