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 Build a Simple iPhone App with Swift Getting Started with iOS Development Swift Recap Part 2

Able to get the expected output in Playground but the same code is giving errors in the compiler

I have instantiated the objects as well and the same code compiled in the playground and I got the output as well but where as in the compiler here, it is throwing the errors.

Can anyone help me out please.

robots.swift
class Point {
  var x: Int
  var y: Int

  init(x: Int, y: Int) {
    self.x = x
    self.y = y
  }
}

class Machine {
  var location: Point

  init() {
    self.location = Point(x: 0, y: 0)
  }

  func move(direction: String) {
    print("Do nothing! I'm a machine!")
  }
}

class Robot: Machine {

      override func move(direction: String) {

        switch direction {

        case "Up" :
            location.y += 1; break
        case "Down":
            location.y -= 1; break
        case "Left" :
            location.x -= 1; break
        case "Right" :
            location.x += 1; break
        default:
            break

        }

    }

}

3 Answers

You only need a break statement at the end

class Point {
    var x: Int
    var y: Int

    init(x: Int, y: Int) {
        self.x = x
        self.y = y
    }
}

class Machine {
    var location: Point

    init() {
        self.location = Point(x: 0, y: 0)
    }

    func move(_ direction: String) {
        print("Do nothing! I'm a machine!")
    }
}

class Robot: Machine{

    override func move(_ direction: String) {
        switch direction {
        case "Up":    location.y += 1
        case "Down":  location.y -= 1
        case "Right": location.x += 1
        case "Left":  location.x -= 1
        default:
            break
        }
    }
}

Hi Jeff, thanks for the reply, but I have tried with single break also, even then it didnt pass the challenge, where as the same code was giving the expected output in the play ground.

Hi Sampath - The code I posted will pass the challenge and is correct, it could also be because you have semicolons at the end of each return case statement.

Thanks Jeff, it worked.

Sampath Kumar Maka The solution Jeff McDivitt gave, is correct. When the challenge loads, the function direction in the class Machine, has the external name omitted with an underscore. While overriding the same function in the class Robot, it also has to be omitted. Xcode hints at that error, however the challenge editor has no features like that. I don't understand why you removed it from the original class of Machine as well. Hope it helps.

Thanks Danish, it worked and I passed the challenge too.