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

标签 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 检查摄氏度的间隔并做一些事情

3)如果是 Fahr 检查华氏温度间隔并执行操作

4)对于昨天标签(与今天标签具有相同的间隔)执行其他操作。

希望有人能明白我的意思。谢谢。

最佳答案

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

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

关于ios - 使用元组 Swift 3 在单个 switch-case 中实现多个间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40525472/

相关文章:

swift - 来自锁定屏幕和通知中心的 iOS Today Widget 通用链接

ios - 如何正确使用时区

ios - 单击主页按钮后未调用 viewWillAppear

iphone - TextField验证

iOS - TableView - 在点击按钮时获取标题部分的索引

ios - UITableViewController 中的节标题和 TableView 单元格出现问题

ios - 在 TWTRComposerViewController 中使用应用卡时如何设置文本?

java - 如何生成具有不同数量符号的字符串掩码?

c++ - 用于匹配和计数的字符串和 int 的容器?

c - 使用 fgets 将字符串从文件流读取到字符数组中。 [C]