1

Xcode 7.3 の Swift 2.2 で奇妙なバグを見つけました (または、バグではありませんが、何か間違ったことをしています)。

この列挙型を初期化子のパラメーターとして受け取る 1 つのケースとクラスを持つ列挙型があります。

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 でクラッシュします (以前のバージョンでは正常に動作します)。
  • 遊び場でOK。
  • 別の列挙型ケースを追加すると問題なく動作します
  • myVar をラップされていないオプションとしてマークすると、OK が動作します

私は何か間違ったことをしていますか、それとも Swift/Xcode/compiler/何か他のバグですか?

4

1 に答える 1

4

これは間違いなくコンパイラのバグです。奇妙なことcaseに、作品に 1 秒を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

サンプルプロジェクト

于 2016-03-23T14:55:50.810 に答える