Closed1

Swiftにおけるenumの面白い挙動

matsueimatsuei

こんな enum があったとして

enum Sports: String {
    case football
    case baseball
    case basketball
    @available(iOS 16.0, *)
    case volleyball
}

switch した場合は、アノテーション無しでも volleyball にアクセスできる

struct ContentsView: View {
    let sports: Sports
    
    var body: some View {
        switch sports {
        case .football, .baseball, .basketball:
            HogeView()
        case .volleyball:
            FugaView()
        }
    }
}

この場合 case .volleyball: 内で @available(iOS 16.0, *) が適用されている扱いになり、以下のようなコードでも問題なくビルドできる

enum Sports: String {
    case football
    case baseball
    case basketball
    @available(iOS 16.0, *)
    case volleyball
}

struct ContentsView: View {
    let sports: Sports
    
    var body: some View {
        switch sports {
        case .football, .baseball, .basketball:
            GeneralView(sports: sports)
        case .volleyball:
            VolleyballView()
        }
    }
}

struct GeneralView: View {
    let sports: Sports
    var body: some View {
        Text(sports.rawValue)
    }
}

@available(iOS 16.0, *)
struct VolleyballView: View {
    var body: some View {
        Text("Volleyball!!!")
    }
}
このスクラップは2022/12/10にクローズされました