Использование троичного для если еще - PullRequest
0 голосов
/ 01 июня 2019

У меня это условие if-else ..

if UIDevice.current.iPad {
    if APIClient.shared.whiteLabel == .gld_default || APIClient.shared.whiteLabel == .abc {
        theImage.contentMode = .scaleAspectFill
    } else {
        theImage.contentMode = .scaleToFill
    }
} else {
    theImage.contentMode = .scaleAspectFill
}

Как я могу использовать троичный оператор вместо этого условия if-else ..

Я ссылался на эту ссылку ... но это не помогло

Ответы [ 2 ]

2 голосов
/ 01 июня 2019

Для внутренней части, если:

if APIClient.shared.whiteLabel == .gld_default || APIClient.shared.whiteLabel == .abc {
   theImage.contentMode = .scaleAspectFill
} else {
   theImage.contentMode = .scaleToFill
}

Дает:

theImage.contentMode = (APIClient.shared.whiteLabel == .gld_default || APIClient.shared.whiteLabel == .abc) ? . scaleAspectFill : . scaleToFill

Теперь, если мы сделаем верхний уровень, если:

theImage.contentMode = UIDevice.current.iPad ? insideIf : . scaleAspectFill

В полном коде:

theImage.contentMode = UIDevice.current.iPad ? (APIClient.shared.whiteLabel == .gld_default || APIClient.shared.whiteLabel == .abc) ? . scaleAspectFill 
                                                                                                                                    : . scaleToFill 
                                             : . scaleAspectFill

Это на самом деле не подлежит восстановлению.

Но

if UIDevice.current.iPad {
    if APIClient.shared.whiteLabel == .gld_default || APIClient.shared.whiteLabel == .abc {
        theImage.contentMode = .scaleAspectFill
    } else {
        theImage.contentMode = .scaleToFill
    }
} else {
    theImage.contentMode = .scaleAspectFill
}

Может быть преобразован в:

if UIDevice.current.iPad && !(APIClient.shared.whiteLabel == .gld_default || APIClient.shared.whiteLabel == .abc) {
    theImage.contentMode = .scaleToFill
} else {
    theImage.contentMode = .scaleAspectFill
}

Это короче, но может быть труднее читать.

С троичным, если:

theImage.contentMode = UIDevice.current.iPad && !(APIClient.shared.whiteLabel == .gld_default || APIClient.shared.whiteLabel == .abc) ? . scaleToFill : . scaleAspectFill

На мой взгляд? Сохраните свою версию (или, может быть, версию, в которой я использую только одну версию if / else). Тем не менее, компилятор оптимизирует, и через два месяца его легче исправить / изменить, если вы поймете, почему и что он делает быстро.

0 голосов
/ 01 июня 2019

Вы можете разбить его на

theImage.contentMode = APIClient.shared.whiteLabel == .gld_default || APIClient.shared.whiteLabel == .abc ? .scaleAspectFill : .scaleToFill
...