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

Compiler segmentation fault while using Set in Swift

这段代码工作正常:

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

但是在编译这个时:

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

我得到:

Command failed due to signal: Segmentation fault: 11

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

我目前的解决方法:

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

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

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

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

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

引用 John Caswell 来自

A compiler segfault is always a bug

根据我的经验,Playgrounds 有点问题。 XCode 游乐场卡在 "running playground" 或 "launching simulator",然后不会 运行 代码。我时不时会遇到这样的错误,其他人 运行 遇到不可重现的问题:

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

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

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

编辑:

仍然在我的 macbook air 和 macbook pro 上使用 Xcode 9.4.1 时,Xcode 崩溃或只是停止在操场上工作。我的同事也一样。有时即使我只是在 Chrome 游乐场也会崩溃!

有人告诉我,如果您打开实用程序,然后将您的平台从 iOS 切换到 macOS,那么您可能能够解决您的 Playground 的 freezing/hanging。但我没试过。