Enum case ‘*’ not found in type ‘*?’

iOS
スポンサーリンク
こんにちは。 雑食会社員🐼くま子です
スポンサーリンク

背景

XCodeを9から10にあげて、
Swiftも3から4にあげました。
(なんでSwift3だったかは謎)

class HogeView : UIView {
    var hogeColor: HogeColor!

    func piyo() {
        var cstr : String
        switch self.hogeColor {
        case .red:  cstr = "red"
        case .blue: cstr = "blue"
        case .yellow:   cstr = "yellow"
        }
    }
}

クラスにenumの変数を持たせて、
関数内でそれをswitchで分岐して処理していたのですが、
caseのところで下記のエラーが出るようになった。

Enum case ‘red’ not found in type ‘HogeColor?’

原因

Reimplementation of Implicitly Unwrapped Optionals
A new implementation of implicitly unwrapped optionals (IUOs) landed in the Swift compiler earlier this year and is available to try in recent Swift snapshots. ...

オプショナル型がうんぬんかんぬん…

あーだめ、まだよくわかっていないので、誰か教えてください。

解決策

変数を!にしない
class HogeView : UIView {
    var hogeColor: HogeColor = .red

    func piyo() {
        var cstr : String
        switch self.hogeColor {
        case .red:  cstr = "red"
        case .blue: cstr = "blue"
        case .yellow:   cstr = "yellow"
        }
    }
}

とりあえず、暗黙型のオプショナルをやめて、初期化時に値を入れておくようにしたらエラーは出なくなりました。

コメント