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 Object-Oriented Swift 2.0 Class Inheritance Overriding Methods

Michal Sverak
Michal Sverak
3,797 Points

Overriding Methods - code challenge

Hi can somebody please help me solve this? I am stuck on this code challenge and I don't really see what is wrong but I really want to solve it :)

2 Answers

Michael Hulet
Michael Hulet
47,913 Points

To override a method in Swift, you just redefine the method again, but you add the override keyword in front of it, kind of like this:

//This can be done with structs or classes (and maybe enums, too?)
struct Parent{
    func someMethod() -> Void{
        print("This is logged from the parent class!")
    }
}

struct Child: Parent{
    //This is an example of overriding a method
    override func someMethod() -> Void{
        print("You successfully overrode someMethod!")
    }
}
Michal Sverak
Michal Sverak
3,797 Points

That is exactly what I have done but It doesn't seems to work for the challenge.

// I've provided a base class Person in the editor below. Once an instance of Person is created, you can call getFullName() and get a person's full name.

// Your job is to create a class named Doctor that overrides the getFullName() method. Once you have a class definition, create an instance and assign it to a constant named someDoctor.

// For example, given the first name "Sam", and last name "Smith", calling getFullName() on an instance of Person would return "Sam Smith", but calling the same method on an instance of Doctor would return "Dr. Smith".

class Person {
    let firstName: String
    let lastName: String

    init(firstName: String, lastName: String) {
        self.firstName = firstName
        self.lastName = lastName
    }

    func getFullName() -> String {
        return "\(firstName) \(lastName)"
    }
}

// Enter your code below

class Doctor:Person {
    override init(firstName: String, lastName: String) {
        super.init(firstName: "John", lastName: "Smith")
    }

    override func getFullName() -> String {
        return "Dr.\(lastName)"
    }
}

let smith = Person(firstName: "John", lastName: "Smith")
smith.getFullName()

let john = Doctor(firstName: "John", lastName: "Smith")
john.getFullName()
Michael Hulet
Michael Hulet
47,913 Points

I think your problem is that the challenge asks for there to be a space between "Dr." and "Smith", but you didn't include that. Try this:

override func getFullName() -> String{
        return "Dr. \(lastName)"
}

Neither of these work

Michael Hulet
Michael Hulet
47,913 Points

I just noticed, but it's probably because I'm trying to not directly give the answer, so you can figure it out for yourself, but I overlooked one thing. Look at the constant name that it wants you to assign to. Are you using that properly?