在 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",然后不会 运行 代码。我时不时会遇到这样的错误,其他人 运行 遇到不可重现的问题:
- 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
- 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 游乐场也会崩溃!
有人告诉我,如果您打开实用程序,然后将您的平台从 iOS 切换到 macOS,那么您可能能够解决您的 Playground 的 freezing/hanging。但我没试过。
这段代码工作正常:
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",然后不会 运行 代码。我时不时会遇到这样的错误,其他人 运行 遇到不可重现的问题:
- 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
- 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 游乐场也会崩溃!
有人告诉我,如果您打开实用程序,然后将您的平台从 iOS 切换到 macOS,那么您可能能够解决您的 Playground 的 freezing/hanging。但我没试过。