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 Functions in Swift Adding Power to Functions Returning Complex Values

Fishka Green
PLUS
Fishka Green
Courses Plus Student 284 Points

Cant understand what kind of design to apply

In this challenge, we have the following geographical coordinates

Eiffel Tower - lat: 48.8582, lon: 2.2945 Great Pyramid - lat: 29.9792, lon: 31.1344 Sydney Opera House - lat: 33.8587, lon: 151.2140

Declare a function named coordinates that takes a single parameter of type String, with an external name for, a local name of location, and returns a tuple containing two Double values (Note: You do not have to name the return values). For example, if I use your function and pass in the string "Eiffel Tower" as an argument, I should get (48.8582, 2.2945) as the value. If a string is passed in that doesn’t match the set above, return (0,0)

functions.swift
// Enter your code below
func coordinates(for location: String)-> (Double, Double) {

var above = (0,0)

    switch monuments {
        case "Eiffel Tower": above = 48.8582; 2.2945
        case "Great Pyramid": above = 29.9792; 31.1344
        case "Sydney Opera House": above = 33.8587; 151.2140
        default: above  = (0,0)
    }
    return (above, monuments)

}
let findAll = coordinates(for: "Eiffel Tower")

2 Answers

Jhoan Arango
Jhoan Arango
14,575 Points

That's fine: Here is a better answer.

So we are going to declare this function and then switch on its parameter.

func coordinates(for location: String) -> (Double , Double ) {
    switch location { // Switch on "location".
    case "Eiffel Tower":
        return (48.8582, 2.2945) // Return tuples
    case "Great Pyramid":
        return (29.9792, 31.1344 )
    case "Sydney Opera House":
        return (33.8587, 151.2140 )
    default:
        return (0.0 , 0.0) // Return Tuple of (0.0,0.0) if they input wrong city
    }
}

Noticed that we didn't have to create extra variables ?

good luck.

Fishka Green
Fishka Green
Courses Plus Student 284 Points

Thanks, its working!) Now i see all mistakes and logic!)

Jhoan Arango
Jhoan Arango
14,575 Points

Hello :

I'm going to guide you a bit through your answer, and see if you can figure out what is wrong with it yourself.

See the comments in your code below.

// Enter your code below
func coordinates(for location: String)-> (Double, Double) {

var above = (0,0) // You are declaring a tuple with 0 values. 

    switch monuments { // monuments ? Where is this value coming from ? 
        case "Eiffel Tower": above = 48.8582; 2.2945 // <--- In Swift we should avoid using ( ; )
        case "Great Pyramid": above = 29.9792; 31.1344
        case "Sydney Opera House": above = 33.8587; 151.2140
        default: above  = (0,0) // <--- are you re-assigning 0 values to an already declared 0 value tuple? 
    }
    return (above, monuments)

}

let findAll = coordinates(for: "Eiffel Tower")

Your switch is "Switching" on an non existing value. Perhaps you should look into switching the parameter label from the function.

After you look at your code, and try to fix it, let me know how it goes. If you do not understand it still, then I will help you further by giving you an answer.

Good luck.