Я новичок в программировании, есть ли более короткий способ достижения того же результата, используя что-то вроде case или caseif? - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть код ниже, написанный в моей программе, но мне было интересно, может ли кто-нибудь помочь мне структурировать более обобщенным образом, используя 'case' или 'caseif' из других языков.

   var imagePressed: UIImageView
    imagePressed = self.redImage

    if color == 1 {

        imagePressed = self.redImage
    }
    if color == 2 {

        imagePressed = self.orangeImage
    }
    if color == 3 {

        imagePressed = self.yellowImage
    }
    if color == 4 {

        imagePressed = self.greenImage
    }

    imagePressed.alpha = 0.5

Ответы [ 3 ]

3 голосов
/ 03 апреля 2020

Я бы предложил использовать словарь, чтобы избежать большого количества кода:

let images = [1 : redImage, 2 : orangeImage, 3: yellowImage, 4: greenImage]
if let image = images[color] {
    imagePressed = image
}

Также рассмотрите возможность замены жестко закодированных чисел перечислением для цвета, например:

enum Color {
    case red
    case orange
...
}
2 голосов
/ 03 апреля 2020

Swift также предоставляет оператор switch. Вы можете просто набрать

var imagePressed: UIImageView

switch color {
    case 1: imagePressed = self.redImage
    case 2: imagePressed = self.orangeImage
    case 3: imagePressed = self.yellowImage
    case 4: imagePressed = self.greenImage
    default: // provide any default value
}

Обратите внимание, что оператор Swift switch не имеет неявного падения. Это означает, что если какой-либо случай совпадает, поток кода прерывается там. Используйте разделенные запятыми условия для сопоставления нескольких случаев.

Я рекомендую прочитать инструкцию switch в их руководстве по языку: https://docs.swift.org/swift-book/LanguageGuide/ControlFlow.html#ID129

1 голос
/ 03 апреля 2020

Ваш синтаксис в любом случае довольно неэффективен, потому что код всегда проверяет все условия, даже если цвет равен 1.

Лучшая форма - if - else if

var imagePressed : UIImageView
imagePressed = self.redImage
if color == 1 {
    imagePressed = self.redImage
} else if color == 2 {
    imagePressed = self.orangeImage
} else if color == 3 {
    imagePressed = self.yellowImage
} else if color == 4 {
    imagePressed = self.greenImage
}
imagePressed.alpha = 0.5

В этом конкретном случае я рекомендую использовать оператор switch и удалить дополнительную переменную

switch color {
    case 1: self.redImage.alpha = 0.5
    case 2: self.orangeImage.alpha = 0.5
    case 3: self.yellowImage.alpha = 0.5
    case 4: self.greenImage.alpha = 0.5
    default: break
}
...