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 Protocols in Swift Protocol Basics Protocols With Methods

Im stuck!! Ive been working on this one for past day, but can't seem to switch the colors correctly. Please Help!

I see the instruction that say "In the implementation of the method, simply change the colors" but I can't figure out how to do this. Do I need to call switchColor after I create an instance of WifiLamp?? Any help will be greatly appreciated!

protocols.swift
// Declare protocol here
protocol ColorSwitchable {
    func switchColor (_ color: Color)
}

enum LightState {
    case on, off
}

enum Color {
    case rgb(Double, Double, Double, Double)
    case hsb(Double, Double, Double, Double)
}

class WifiLamp: ColorSwitchable {
    let state: LightState
    var color: Color

    init(state: LightState, color: Color) {
        self.state = state
        self.color = color
    }
    func switchColor (_ color: Color) {
    }
}

let lampUser = WifiLamp(state: .off, color: .hsb(1.0, 1.0, 1.0, 1.0))

1 Answer

Jason Anders
MOD
Jason Anders
Treehouse Moderator 145,692 Points

Hey Alphonso,

You're on the right track, but there are a some issues with the code:

  1. First, you altered the init method, and the challenge did not ask you to. Challenges are very specific and picky, so if it didn't tell you to do something... don't. So, you will need to reset the challenge to restore the original pre-loaded code.
  2. You don't have any code in the overriding function? In the WifiLamp class, the function needs to do something. In this case, the challenge say to "simply change the colors" so you need to assign self.color the value of color coming in from the parameters passed into the function.
  3. The function is like a variable and needs to come before the init method. So, you just need to move it above the init.
  4. The challenge didn't ask you to call the function. This goes back to the first point... so just delete that line of code.

Below is the corrected code for the Class. Once you correct the above, everything else looks good and the code will pass. :)

class WifiLamp: ColorSwitchable {
  let state: LightState
  var color: Color

  func switchColor (_ color: Color) {
   self.color = color
  }

  init() {
    self.state = .on
    self.color = .rgb(0,0,0,0)
  }
}

Keep Coding! :dizzy:

Hey Jason,

Thank you so much. That really helped. I started over after reading your instruction and got it! I like to understand what each section of code is doing instead of just getting the right answer. Your steps helped me gain that understanding! Thank you!