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 Swift Enums and Structs Structs and their Methods Struct Methods

K Jo
K Jo
7,283 Points

When and why do we use self?

You mention that we can add self. before firstName and lastName in the return line, but we do not necessarily need this. Can you explain this in more detail? I believe I understand what self represents, as well as the syntax for using it, but I don't fully understand why it is used. When I take the self. syntax out of the the return line or out of the init lines, the outputs do not appear to change?

1 Answer

Stone Preston
Stone Preston
42,016 Points

it is not necessary to use self most of the time. It is necessary, however, when you have a parameter or other variable with the same name as the property. you must use self to distinguish the property from the parameter:

init(firstName: String, lastName: String) {
self.firstName = firstName
self.lastName = lastName

you can see that it would not really work if you did not use self

init(firstName: String, lastName: String) {
//is this referring to the property or the parameter?
firstName = firstName
lastName = lastName

from the Swift eBook:

In practice, you don’t need to write self in your code very often. If you don’t explicitly write self, Swift assumes that you are referring to a property or method of the current instance whenever you use a known property or method name within a method

The main exception to this rule occurs when a parameter name for an instance method has the same name as a property of that instance. In this situation, the parameter name takes precedence, and it becomes necessary to refer to the property in a more qualified way. You use the self property to distinguish between the parameter name and the property name.

really the only time you need to use self is when you have to clear up an ambiguity like the one above, or when you are referencing properties inside closures.

most of the time the parameters of the init method use the same name of the properties, so you will self used a lot in initializers for this reason.