How do I handle this initializer?

53 views Asked by At

Create a class called Parent with a title property and write an init and deinit method for your class.

Write a subclass called Child.

My problem is putting this into the code (call super.init(title:) and pass on the title parameter.

class Parent {
    let title: String

    init(title: String){
        self.title = title
        print("\(title) is initialized")
    }

    deinit {
        print("\(title) is being deinitialized.")
    }
}

class Child: Parent {
    let subtitle: String
    init(subtitle: String){
        self.subtitle = subtitle
        // i'm supposed to call a super.init, how

        print("\(subtitle) is initialized")
    }

    deinit {
        print("\(subtitle) is being deinitialized.")
    }
}
2

There are 2 answers

3
vacawama On BEST ANSWER

Make your initializer for your Child take both a title and a subtitle, and then call super.init(title: title) in your Child's initializer:

class Child: Parent {
    let subtitle: String
    init(title: String, subtitle: String){
        self.subtitle = subtitle
        super.init(title: title)

        print("\(subtitle) is initialized")
    }

    deinit {
        print("\(subtitle) is being deinitialized.")
    }
}

Then if you create a Child object and assign it to an Optional Child (i.e. Child?) you'll see both initialized messages:

var child: Child? = Child(title: "Star Wars: Episode VI", subtitle: "Return of the Jedi")

Star Wars: Episode VI is initialized
Return of the Jedi is initialized

and then if you assign nil to your variable you'll see both deinitialized messages:

child = nil

Return of the Jedi is being deinitialized.
Star Wars: Episode VI is being deinitialized.

2
scrodrig On

I actually didn't try but I think it could work this way. Let me know if it works.

class Child: Parent {
    let subtitle: String

    override init(title: String, subtitle:String) {
        self.subtitle = subtitle
        super.init(title)
    }
}