Welcome to the Treehouse Community

The Treehouse Community is a meeting place for developers, designers, and programmers of all backgrounds and skill levels to get support. Collaborate here on code errors or bugs that you need feedback on, or asking for an extra set of eyes on your latest project. Join thousands of Treehouse students and alumni in the community today. (Note: Only Treehouse students can comment or ask questions, but non-students are welcome to browse our conversations.)

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and a supportive community. Start your free trial today.

iOS Object-Oriented Swift Properties Getter and Setter Methods

Antonis Tsagaris
Antonis Tsagaris
17,511 Points

Help with getter and setter challenge

Hi,

What is wrong with the code attached?

Any help will be appreciated! :)

Temperature.swift
class Temperature {
    var celsius: Float
    var fahrenheit: Float {
        get {
            return self.celsius * 1.8 + 32
        }
        set {
            self.celsius = (newValue-32)/1.8
        }
    }

    init(celsius: Float) {
        self.celsius = celsius
    }
}

5 Answers

You had the answer, just omit the init() you add at the end of the class.

class Temperature {
    var celsius: Float = 0.0
    var fahrenheit: Float {
        get {
        return (celsius * 1.8) + 32.0
        }

        set {
            celsius = (newValue - 32) / 1.8
        }
    }
}

You are setting the Fahrenheit property (calls the setter) and pass the new value you are setting. You may be just over thinking it. Paste this into a playground and try it out your self.

class Temperature {
    var celsius: Float = 0.0


    var fahrenheit: Float {
        get {
            return (celsius * 1.8) + 32.0
        }

        set {

            print(newValue) // ------> Prints 50.0

            celsius = (newValue - 32) / 1.8


        }
    }
}

let temp = Temperature()

temp.fahrenheit = 50 // ---------> You are setting the value off Fahrenheit
Antonis Tsagaris
Antonis Tsagaris
17,511 Points

Indeed! That was the problem!

Thanks Gary!

Robert Kaltenbach
Robert Kaltenbach
10,285 Points

Hi there!

I've completed this challenge as above listed, but I was having trouble as I was trying to do the following:

class Temperature {
    var celsius: Float = 0.0
    var fahrenheit: Float {
    set {
        return (celsius * 1.8) + 32.0
        }
    get {
        celsius = (fahrenheit - 32) / 1.8
        }
    }    
}

I'm having a hard time understanding why I cannot just directly assign celsius using the fahrenheit variable. Can someone kindly explain why I must use newValue and how the code knows the newValue I refer to means the setter above?

Thanks

Robert Kaltenbach
Robert Kaltenbach
10,285 Points

Ah! Your print lines helped immensely! Thanks!