[Swift] 71 条件演算子を使ったリファクタリング

[Mac M2 Pro 12CPU, Sonoma 14.3.1]

SwiftUIアプリでトグルボタン2つと言語設定で分岐させたif文がメンテ不能な程にややこしくなったため、条件演算子を使ってリファクタリングしました。

条件 ? 真の場合の値 : 偽の場合の値

Clangではあり得なかったことですが、Xcodeでややこしいコードを書くと根を上げてエラーになりリファクタリングを強制されます。

[整理前]

VStack (spacing: -6){
    if bezelDisplay {
        if !coloredCMP {
            if languageCode!.contains("ja") {
                Text(getFormattedWeekday(entry.date).prefix(2))
                    .font(.system(size: 15))
                    .bold()
                    .foregroundColor(Color(hex:colorCircular1Hex))
                    .containerBackground(for: .widget){
                        Color.blue
                    }
                    .widgetLabel {
                        Text(getYear(entry.date) + " " + getFormattedYear(entry.date))
                            .font(.system(size: 20))
                    }
            } else {
                Text(getFormattedWeekday(entry.date).prefix(2))
                    .font(.system(size: 15))
                    .bold()
                    .foregroundColor(Color(hex:colorCircular1Hex))
                    .containerBackground(for: .widget){
                        Color.blue
                    }
                    .widgetLabel {
                        Text(getYear(entry.date))
                            .font(.system(size: 20))
                    }
            }
        } else {

<以下略>

[整理後]

VStack (spacing: -6){
    let fontSize: Font = coloredCMP ? .system(size: 18) : .body
    let yearText: String = bezelDisplay ? (languageCode!.contains("ja") ? getYear(entry.date) + " " + getFormattedYear(entry.date) : getYear(entry.date)) : ""

    Text(getFormattedWeekday(entry.date))
        .font(fontSize)
        .bold()
        .foregroundColor(Color(hex: colorCircular1Hex))
        .containerBackground(for: .widget) {
            Color.blue
        }
        .padding(.vertical, 2)
        .widgetLabel {
            Text(yearText)
                .font(.system(size: 20))
        }
        
    Text(getDay(entry.date))
        .font(.system(size: 20))
        .bold()
        .foregroundColor(Color(hex:colorCircular3Hex))
        .containerBackground(for: .widget){
            Color.blue
        }
}