2015-10-16 75 views
0

我有一個類FbPostViewCell繼承UITableViewCell類。從FbPostViewCell我做其他類:FbLinkPostViewCell。如何以特定方式啓動FbPostViewCellFbLinkPostViewCell對象的實體?我的意思是我需要init的成員FbPostViewCell實例FbLinkPostViewCell對象。斯威夫特。我如何創建單元格的自己的初始化器

我寫了一個convenience init() { super.init() /* stuff */ }但程序行爲告訴我,我的成員沒有初始化。與required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) /* same stuff */ }相同的情況。我做錯了什麼?

回答

1

如果您已將存儲的屬性添加到您的子類中,您將不得不以某種方式啓動它們。這意味着你應該: - 使所有添加的屬性可選,這樣,他們可以留而不值 - 給所有屬性的初始值 - 添加自定義初始化

這個自定義初始化應該只是一個普通的初始化它調用super.init()並初始化所有的屬性。如果你已經添加了這個init,你可以通過使用你自己的方便初始值設定項來創建一個你的子類型的對象。但是這個方便的初始化器應該調用self.init()。

希望這有助於蘋果斯威夫特導向相關頁面:https://developer.apple.com/library/watchos/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html#//apple_ref/doc/uid/TP40014097-CH18-ID203

編輯:

class FbPostViewCell : UITableViewCell { 
    init(maybe variables) { 
     super.init() //inits UITableViewCell properties 
     /* init fbpostviewcell properties with 'maybe variables' */ 
    } 
} 

class FbLinkPostViewCell : FbPostViewCell { 
    init(more variables) { 
     super.init(maybe variables) //inits UItvc properties and fbpostviewcell's 
     /* init fblinkpostviewcells properties with more variables */ 
    } 

    convenience init(postMode?) { 
     if let mode = postMode { 
     switch mode { 
     case mode1: self.init(mode1 specific vars) 
     case mode2: self.init(mode2 speciific vars) 
     default: self.init(default vars) 
     } 
     else { 
     self.init(no mode vars) 
     } 
    } 
} 
+0

我的屬性是網點。有沒有辦法根據我的要求初始化網點?我的意思是UILabels中的'text'屬性和UIImage中的'image'。 >「如果您已經添加了此init,您可以始終使用您自己的便捷初始值設定項來創建子類型的對象。」怎麼樣 ?? :) – drewpts

+0

@drewpts我添加了一個例子,原諒我的語法錯誤和東西我不靠近一個Mac atm。希望這可以幫助 – Simon

相關問題