【问题标题】:Multiple intervals in single switch-case using tuple Swift 3使用元组Swift 3在单个开关案例中的多个间隔
【发布时间】:2016-11-10 10:37:00
【问题描述】:

我是编程新手,我正在尝试在多个条件下进行切换。我有一个标签,它以摄氏温度或华氏温度为单位,具体取决于设置的温度,我需要根据温度间隔取值并属性一些设置。我怎样才能在一个开关中管理它(如果可能的话),我知道如何使用 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,则检查摄氏度的间隔并做一些事情

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

4)对于昨天的标签(TodayLabel 的间隔相同),对其他内容进行处理。

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

【问题讨论】:

  • 先把一切都转换成摄氏,然后再打开摄氏值。

标签: ios swift string switch-statement


【解决方案1】:

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

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
        }
    }
}

【讨论】:

    猜你喜欢
    • 2014-09-29
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    相关资源
    最近更新 更多