Senator
Senator

Reputation: 83

How to loop a Slider value for height?

I successfully created a slider for user height in storyboard and the corresponding code to assign a value in the slider to each level of height but as you can see below, I had to manually copy & paste each new height variable to get it to work. I was curious how an expert would simplify this code? thanks!

*note - I removed the code for height 5'2 to 6'4 to not take up so much space.

'''

@IBOutlet weak var yourHeightEquals: UILabel!

@IBOutlet weak var heightSliderOutlet: UISlider!

@IBAction func heightSliderAction(_ sender: UISlider) {
    
    heightSliderOutlet.value = roundf(heightSliderOutlet.value)
    
    let yourHeightText: String = "Your Height: "
    
    if heightSliderOutlet.value == 0 {
        
        let yourHeightString = "Choose Your Height"
        
        yourHeightEquals.text = yourHeightString
    }
    
    else if heightSliderOutlet.value == 1 {
        
        let yourHeightString = "<5'0"
        
        yourHeightEquals.text = yourHeightText + yourHeightString
    }
    
    else if heightSliderOutlet.value == 2 {
        
        let yourHeightString = "5'0"
        
        yourHeightEquals.text = yourHeightText + yourHeightString
    }
    
    else if heightSliderOutlet.value == 3 {
        
        let yourHeightString = "5'1"
        
        yourHeightEquals.text = yourHeightText + yourHeightString
    }
   

.......

    else if heightSliderOutlet.value == 19 {
        
        let yourHeightString = "6'5"
        
        yourHeightEquals.text = yourHeightText + yourHeightString
    }
    
    else if heightSliderOutlet.value == 20 {
        
        let yourHeightString = ">6'5"
        
        yourHeightEquals.text = yourHeightText + yourHeightString
    }
    
}

'''

Upvotes: 0

Views: 173

Answers (2)

Senator
Senator

Reputation: 83

Update - the switch code above only worked for a metric system - I had to modify it a bit for feet & inches, still much cleaner than my original code!

@IBOutlet weak var yourHeightEquals: UILabel!

@IBOutlet weak var heightSliderOutlet: UISlider!

@IBAction func heightSliderAction(_ sender: UISlider) {
    
    let value = roundf(heightSliderOutlet.value)
    
    switch value {
    case 0:
        yourHeightEquals.text = "Choose Your Height"
    case 1:
        yourHeightEquals.text = "Your Height: <5'0"
    case 2...11:
        let height = 5.0 + ((value - 2) * 0.1)
        let heightstring = String(height)
        let heightfoot = heightstring.dropLast(2)
        let heightinch = heightstring.dropFirst(2)
        let heightfootinch = heightfoot + "'" + heightinch
        yourHeightEquals.text = "Your Height: \(heightfootinch)"
    case 12:
        yourHeightEquals.text = "Your Height: 5'10"
    case 13:
        yourHeightEquals.text = "Your Height: 5'11"
    case 14...19:
        let height = 6.0 + ((value - 14) * 0.1)
        let heightstring = String(height)
        let heightfoot = heightstring.dropLast(2)
        let heightinch = heightstring.dropFirst(2)
        let heightfootinch = heightfoot + "'" + heightinch
        yourHeightEquals.text = "Your Height: \(heightfootinch)"
    default:
        yourHeightEquals.text = "Your Height: >6'5"
    }
    
}

Upvotes: 0

Mohammed Abdul Basith
Mohammed Abdul Basith

Reputation: 224

You can use a switch statement like this.

@IBOutlet weak var heightSliderOutlet: UISlider!
@IBOutlet weak var yourHeightEquals: UILabel!
@IBAction func heightSliderAction(_ sender: UISlider) {
    let value = roundf(heightSliderOutlet.value)
    switch value {
    case 0:
        yourHeightEquals.text = "Choose Your Height"
    case 1:
        yourHeightEquals.text = "Your Height : <5'0"
    case 2...19:
        let height = 5.0 + ((value - 2) * 0.1)
        yourHeightEquals.text = "Your Height : \(height)"
    default:
        yourHeightEquals.text = "Your Height: >6'5"
    }
}

Upvotes: 1

Related Questions