我是编程新手,我正在尝试使用多种条件进行切换。我有一个标签,根据设置的温度,摄氏或华氏温度,我需要取值,并根据温度间隔属性设置。如何在一个交换机中管理(如果可能的话),我知道如何使用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的间隔相同),做其他事情。
希望有人能理解我的意思。谢谢。
答案 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
}
}
}