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

I don't know what I am doing wrong for task 2. I have to set color to the new color. Please help!!!

I am not sure what I am doing wrong.

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() {
    self.state = .on
    self.color = .rgb(0,0,0,0)
  }
}

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

2 Answers

Check your placement of the following code:

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

Thanks Chris!!

You have done almost everything right. The only thing missed - Your method definition should be within the class and not outside. Something like this:

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() {
        self.state = .on
        self.color = .rgb(0,0,0,0)
    }

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

The class WifiLamp adopts the ColorSwitchable protocol and hence the method declared in the protocol should be defined inside the WifiLamp class.

Hope this helps.

Thanks Bharath Chandrashekar!! It worked!!