Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

iOS Swift Functions and Optionals Optionals What is an Optional?

Sujoy Singh
Sujoy Singh
10,620 Points

'=' used instead of '==' in an if statement.

How does the following if statement evaluate to a boolean expression?

if let culprit = findApt("102") {
    println("Apt found: \(culprit)")
}

The if statement here uses an assignment operator instead of a comparing operator.

Here the optional binding (Swift feature) is used. What it means is basically that if after using the function "findApt(#param)" you get a value, and this value is not 'nil', then perform the code to print this value (inside {}). You can think of it as a two step process: first, a value returned from "findApt(#param)" is assigned to culprit constant, and then this constant is compared to 'nil'.

1 Answer

Nathan Tallack
Nathan Tallack
22,159 Points

The = operator is an assignment operator. So in your example you are saying if I am returned any value other than nil from the function findApt passing in the string "102" as a paramater, then get that returned value, assign it to the constant let within the scope of the following code block. If it was nil then it would skip your code block.

So your println statement inside that codeblock gets the value of culprit from that if let (that's called an optional binding) and uses it in your string interpolation.

If you were to use the == operator, which is the equality operator, you would be creating invalid syntax. The optional binding (the if let) needs an assignment statement to follow it. You could not follow it with an equality statement.

An example of using the equality operator would be what your optional binding (the if let) is doing under the hood. Imagine you were not using optional binding and wanted to check that functions return value yourself. Then you could write it out like this.

if findApt("102") == nil {
    println("Apt not found!")
} else {
    println("Apt found!")

I hope this helps. :)