2016-11-10 2 views
0

私はプログラミングが初めてで、複数の条件でスイッチを実行しようとしています。私は摂氏または華氏で温度を取るラベルを持っています。これはどちらが設定されているかに依存しています。私は値をとり、温度間隔に基づいていくつかの設定をする必要があります。タプルを使用した単一スイッチケースの複数の区間Swift 3

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

がすることが可能です:どのように私は(それが可能であるならば)一つのスイッチで、私は4つのスイッチを使用して、それは非常に長いコードだ...私はこのようななめらかにしようとしたことを行う方法を知っていることを管理することができますそれは次の操作を行うことができるように一つのスイッチでそれを管理:

1)それはファールやセル画、

2だ場合、それは摂氏のための間隔をチェックしとか

3を行うには設定資料集だ場合)をチェックした場合)華氏の間隔をチェックして何かをするのはファーです。

4)そして昨日のラベル(TodayLabelと同じ間隔で)は他のものと同じです。

誰かが私の言いたいことを理解することを望みます。ありがとうございました。列挙型の中にいくつかのロジックをカプセル化する

+2

すべてを摂氏に変換してから、摂氏の値をオンにします。 –

答えて

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 
     } 
    } 
} 
関連する問題