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

Nikita Voloboev
Nikita Voloboev
4,816 Points

How come this code doesn't get accepted? It gives the correct outputs for me.

I would really be grateful if someone could help me understand what is wrong with it and why it doesn't get accepted to pass the challenge. Perhaps I did something wrong.

classes.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!")
    }

    func getPosition() -> Point {
        return Point(x: location.x, y: location.y)
    }
}

// Enter your code below
class Robot: Machine {
    var robotLocation: Point

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

    func sayXPos() {
        print("\(robotLocation.x)")
    }

    func increaseXbyOne() {
        robotLocation.x = robotLocation.x + 1
    }

    override func getPosition() -> Point {
        return Point(x: robotLocation.x, y: robotLocation.y)
    }

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

3 Answers

Hi Nikita, it should look like this.

class Robot: Machine {
  override func move(direction: String) { 
    switch direction {
      case "Up": location.y += 1
      case "Down": location.y -= 1
      case "Left": location.x -= 1
      case "Right": location.x += 1
      default: break
    }
  }
}
Nikita Voloboev
Nikita Voloboev
4,816 Points

Thank you, that worked perfectly.

I am really uncertain how super.init works and what exactly does it do and also when do we have to use it.

Do you mean override init?

Nikita Voloboev
Nikita Voloboev
4,816 Points

Yes, for example there was code like this in the tower defence game :

override init(x: Int, y: Int) {
    super.init(x: x, y: y)
}

I'm really confused about the super.init and its purpose. From what I understand, when you override something within a subclass, it lets the program know that you want to use that thing instead of what is in its superclasses. Is that correct?

Hi Nikita correct. When you override a function within a subclass you also need to override it's initialiser. It can be a bit messy at first but i strongly suggest you watch the video again on inheritance as well read and watch other material online.