使用元组Swift 3在单个switch-case中的多个间隔

时间:2016-11-10 10:37:00

标签: ios swift string switch-statement

我是编程新手,我正在尝试使用多种条件进行切换。我有一个标签,根据设置的温度,摄氏或华氏温度,我需要取值,并根据温度间隔属性设置。如何在一个交换机中管理(如果可能的话),我知道如何使用4个交换机,但它的代码非常长......我试过这样的事情:

        let todayStringComponent = Double(tempLabel.text!)
        let fahrStringComponent = Double(tempLabel.text!)
        let yesterdayStringComponent = Double(yesterdayLabel.text!)
        switch (celsUnitButtonBool, todayStringComponent!) {
        case (true?, -100 ... -40) :
            //  gradientImageOutlet.image = UIImage(named: "thermo_01.png")!
            if UIDevice.current.userInterfaceIdiom == .pad
            {
                temperatureViewCenterAxisCnstr.constant = 315
                gradientHeight.constant = 0
                animateChanges()
            } else if  UIDevice.current.userInterfaceIdiom == .phone
            {
                temperatureViewCenterAxisCnstr.constant = 315
                gradientHeight.constant = 470

                animateChanges()
            }
        case (true?, -39 ... -26):
            //   gradientImageOutlet.image = UIImage(named: "thermo_02.png")!
            if UIDevice.current.userInterfaceIdiom == .pad
            {
                temperatureViewCenterAxisCnstr.constant = 275
                gradientHeight.constant = 75

                animateChanges()
            } else if  UIDevice.current.userInterfaceIdiom == .phone
            {
                temperatureViewCenterAxisCnstr.constant = 315
                gradientHeight.constant = 470

                animateChanges()
            }   default:
            print("WTH")
        }

是否可以在一台交换机中管理它,以便它可以执行以下操作:

1)检查它是否为Fahr或Cels,

2)如果它的Cels检查Celsius的间隔并做东西

3)如果是Fahr来检查华氏度的间隔并做一些事情

4)对于昨天的标签(与TodayLabel的间隔相同),做其他事情。

希望有人能理解我的意思。谢谢。

1 个答案:

答案 0 :(得分:0)

将一些逻辑封装到枚举中会将客户端代码简化为以下内容:

let celsUnitButtonBool = true
let todayStringComponent = -50

let sample = Temperature(cellButtonIsPressed: celsUnitButtonBool,
                         value: todayStringComponent)

switch (sample, sample.value) {
case (.Fahrenheit, -100 ... -40):
    break
case (.Celsius, -39 ... -26):
    break
default:
    break
}

Temperature的实施非常简单。

enum Temperature {
    case Fahrenheit(value: Int)
    case Celsius(value: Int)
}

extension Temperature {
    init(cellButtonIsPressed: Bool, value: Int) {
        if cellButtonIsPressed {
            self = .Celsius(value: value)
        } else {
            self = .Fahrenheit(value: value)
        }
    }

    var value: Int {
        switch self {
        case .Fahrenheit(value: let value),
             .Celsius(value: let value):
            return value
        }
    }
}