我该如何处理这个初始化程序?

问题描述:

title属性创建一个名为Parent的类并为您的课程编写initdeinit方法。我该如何处理这个初始化程序?

编写一个名为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.") 
    } 
} 

让你初始化你Child接受一项titlesubtitle,然后调用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 

绝地的归来正在被初始化。
星球大战:第六集正在被初始化。

+0

非常感谢。还有一件事我忘了放在“创建一个可选的类型为Child的变量并为其指定一个子对象。” – AllocSystems

+1

'var child:Child? =儿童(标题:“某些标题”,副标题:“一些小标题”)' – vacawama

+1

然后如果你用'child = nil'跟随它,你会看到你的两个deinit消息。 – vacawama

我其实没有尝试,但我认为它可以这样工作。让我知道它是否有效。

class Child: Parent { 
    let subtitle: String 

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

你不需要为'title'和'string'指定一个类型吗?此代码不适合我编译。 –

+0

是的,你是对的,我想我不编译它必须被定义为字符串 –