Xcode 分段错误:11与使用枚举扩展'Error'协议有关
在从Xcode 8 beta 3升级到Xcode 8 beta 4(8S188o)并执行通常的重命名迁移之后,我仍然看到9个或更多的构建错误被标记为Xcode 分段错误:11与使用枚举扩展'Error'协议有关,xcode,swift3,xcode8,Xcode,Swift3,Xcode8,在从Xcode 8 beta 3升级到Xcode 8 beta 4(8S188o)并执行通常的重命名迁移之后,我仍然看到9个或更多的构建错误被标记为分段错误:11 我注意到这些都与应用程序的错误扩展枚举有关。我构建了一个独立的测试项目,现在我可以用这段代码重新创建这个问题(所以你可以——把它放到任何项目中,观看烟花): 上面的代码使构建崩溃,但如果我做了下面的微小更改,构建就会正常工作: enum AppError { // Changed: don't conform to `Error`
分段错误:11
我注意到这些都与应用程序的错误
扩展枚举有关。我构建了一个独立的测试项目,现在我可以用这段代码重新创建这个问题(所以你可以——把它放到任何项目中,观看烟花):
上面的代码使构建崩溃,但如果我做了下面的微小更改,构建就会正常工作:
enum AppError { // Changed: don't conform to `Error`
当然,这对于我们的应用程序来说是不可接受的,因为我们希望抛出并捕获指定类型的错误对象
如果我使用结构或类,它也会修复它:
struct AppError: Error { // Changed: use a struct
但是我们在任何地方都打开错误类型并使用相关的值,所以这看起来像是一个巨大的重构。我认为,它也不太清楚地表达了我们试图建立的模型。如果这就是我要做的,我可能不得不去建造
我尝试过反复切换构建开关,进行干净的构建,退出并重新进入xcode,甚至升级到beta 5;但是没有用
- 在最新的swift 3版本中,我用枚举扩展基
类的模式是否有问题?(到目前为止工作得很好)Error
谢谢你的帮助 问题似乎是Swift不喜欢将错误枚举(作为函数参数的类型)四处传递 现在可以通过将AppError设置为结构来解决这个问题。经过一些思考,这可以在不严重丧失通用性的情况下实现
@nonobjc
(谢谢@JordanRose!)来解决此问题:文件
MenuDisplayer.swift
中在线161
的内容似乎是Xcode中的一个bug;如果有可能的话,不妨试试7.3.1,看看问题是否依然存在。在这种情况下,我可能会尝试更改您的协议,使用兼容类型和实例方法来调用类中的函数-一个基本示例如下:以27787072的身份提交给apple radar好的,我想我知道该怎么做了。见下面我的答案。(顺便说一句,这是一个非常好的bug。我建议你也提交到bugs.swift.org。如果你需要我帮你做的话,请告诉我。)Bummer。我们有大量的应用程序代码,在给定的错误上切换
es。有什么办法吗?也许我在错误结构中放了一个枚举。就是这么多的重构。有些情况下有相关的值,如.notFound(id:Int)
我可以为结构
类型实现可切换
一致性吗?太棒了。谢谢你的回复。我告诉过你向金丝燕提交是个好主意![咆哮]为什么没有很多人投票支持你的问题?你出色地提出了这个问题!如果每个人在提出堆栈溢出问题之前都做了这么多准备工作,这将是一个光明美丽的世界!!好了,我现在冷静下来了…谢谢你建议这条路线,马特。苹果漏洞报告(没有透明度,标记为重复)让我非常沮丧,我几乎没有。尽管如此,快速的bug报告还是很棒的。:)我知道这就是你会发现的!
struct AppError: Error { // Changed: use a struct
enum AppError: Error {
case one
case two
}
class ViewController: UIViewController, ErrorReceiver {
@nonobjc
func thingError(with error: AppError) {
print(error)
}
}