swift: как заменить if if в операторах переключения - PullRequest
0 голосов
/ 05 июля 2018

У меня есть if else чек:

var aItem: CGFloat = 0

if item == 0 {
    aItem = 457

} else if item == 1 {
    aItem = 576

} else if item == 2 {
    aItem = 758

}

print(aItem)

Я хочу заменить этот фрагмент кода на switch операторов регистра. Как это сделать?

Я пытался:

    var aItem: CGFloat = 0

    switch item {
    case _ where item == 0:

        aItem = 457

    case _ where item == 1:

        aItem = 576

    case _ where item == 2:

        aItem = 758

    default:
        print("this is impossible")
    } 

Это работает, но это лучшее решение? Может, можно как-то упростить этот код?

А что лучше использовать? if else или поменять регистр операторов?

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Вот еще одна интересная альтернатива (которая может быть полезна, например, при инициализации свойства экземпляра:

struct SomeType {
    let someProperty: Int = {
        let x = 0

        switch x { // Unfortunately, `x` can't be an instance member of self.
        case 0: return 457
        case 1: return 576
        case 2: return 758
        default:
            fatalError("this is impossible")
        }
    }()
}
0 голосов
/ 05 июля 2018

Должно быть записано как:

let aItem: CGFloat

switch item {
case 0:
    aItem = 457
case 1:
    aItem = 576
case 2:
    aItem = 758
default:
    aItem = 0
    print("this is impossible")
}

print(aItem)

Если это факт, что ваш item может быть только 0, 1 или 2, я бы сделал:

let anItem: CGFloat = [457, 576, 758][item]

В этом случае есть небольшая разница между использованием if else или switch. Выберите свой любимый. if и switch имеют сильные стороны. Используйте то, что когда-либо лучше всего соответствует нужному вам коду / логике. Или, как в этом случае, не используйте либо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...