Как мне справиться с этим инициализатором?
Создайте класс с именем 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)
}
}