带有一个案例的Swift枚举会在运行时导致BAD_ACCESS

时间:2016-03-23 11:20:05

标签: xcode swift enums swift2.2 xcode7.3

我在Xcode 7.3上发现了Swift 2.2中的奇怪错误(或者它不是错误但是我做错了什么)。

我有一个案例和类的枚举,它将此枚举作为初始化程序的参数

enum OneCaseEnum {
    case X
}

class OneEnumWrapper {
    var myVar: OneCaseEnum

    init(v: OneCaseEnum)
    {
        self.myVar = v
    }
}

现在,如果我在真实应用程序中运行此代码,即在AppDelegate中的某个地方:

let e = OneCaseEnum.X
print(e)
let x = OneEnumWrapper(v: e)
print(x)

我在第3行的运行时获得了BAD_ACEESS。

  • 它在Xcode 7.3中崩溃(在以前的版本上工作正常)。
  • 在游乐场工作正常。
  • 如果我添加另一个枚举案就行了确定
  • 如果我将myVar标记为未包装的可选作品,则确定

我做错了什么还是Swift / Xcode /编译器/其他bug?

1 个答案:

答案 0 :(得分:4)

这绝对是编译器的一个错误。奇怪的是,向case添加第二个enum可以完美地运作:

enum OneCaseEnum {
    case X
    case Y
}

class OneEnumWrapper {
    var myVar: OneCaseEnum

    init(v: OneCaseEnum)
    {
        self.myVar = v
    }
}

let e = OneCaseEnum.X
print(e)
let x = OneEnumWrapper(v: e) // no crash
print(x)

您可以将此作为一种解决方法,直到识别并修复此崩溃为止。

rdar://25314388

SR-1035

Sample project