2017-01-08 40 views
0

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

回答

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

星戰前傳VI初始化
返回絕地初始化

,然後如果你分配nil您變量你會看到未初始化消息:

child = nil 

絕地的歸來正在被初始化。
星球大戰:第六集正在被初始化。

+0

非常感謝。還有一件事我忘了放在「創建一個可選的類型爲Child的變量併爲其指定一個子對象。」 – AllocSystems

+1

'var child:Child? =兒童(標題:「某些標題」,副標題:「一些小標題」)' – vacawama

+1

然後如果你用'child = nil'跟隨它,你會看到你的兩個deinit消息。 – vacawama

0

我其實沒有嘗試,但我認爲它可以這樣工作。讓我知道它是否有效。

class Child: Parent { 
    let subtitle: String 

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

你不需要爲'title'和'string'指定一個類型嗎?此代碼不適合我編譯。 –

+0

是的,你是對的,我想我不編譯它必須被定義爲字符串 –

相關問題