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

时间:2017-01-08 00:09:22

标签: swift initializer deinit

创建一个名为Parent且具有title属性的类,并为您的班级编写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.")
    }
}

2 个答案:

答案 0 :(得分:1)

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

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

然后,如果您将nil分配给您的变量,则会看到取消初始化的消息:

child = nil
  

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

答案 1 :(得分:0)

我实际上没有尝试,但我认为它可以这样工作。如果有效,请告诉我。

class Child: Parent {
    let subtitle: String

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