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

Swift's enum with one case causes BAD_ACCESS at runtime

我在 Swift 2.2 on Xcode 7.3 中发现了一个奇怪的错误(或者这不是错误,但我做错了什么)。

我有一个枚举,class 将这个枚举作为初始值设定项的参数

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。

是我做错了什么还是 Swift/Xcode/compiler/something 其他错误?

这绝对是编译器的错误。奇怪的是,在 enum 中添加第二个 case 效果非常好:

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