Как мне справиться с этим инициализатором?

Создайте класс с именем Parent с title собственности и написать init а также deinit метод для вашего класса.

Написать подкласс Child,

Моя проблема заключается в том, чтобы вставить это в код (вызов super.init(title:) и передать title параметр.

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 ответа

Решение

Сделайте ваш инициализатор для вашего Child взять как title и subtitle, а затем позвоните super.init(title: title) в вашем Childинициализатор:

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

Затем, если вы создаете Child объект и назначить его на необязательный Child (т.е. Child?) вы увидите оба инициализированных сообщения:

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

Звездные войны: Эпизод VI инициализирован
Возвращение джедая инициализировано

а затем, если вы назначите nil в вашей переменной вы увидите оба деинициализированных сообщения:

child = nil

Возвращение джедая деинициализируется.
Звездные войны: Эпизод VI деинициализируется.

Я на самом деле не пытался, но я думаю, что это может сработать. Дайте мне знать, если это работает.

class Child: Parent {
    let subtitle: String

    override init(title: String, subtitle:String) {
        self.subtitle = subtitle
        super.init(title)
    }
}
Другие вопросы по тегам