2015-10-16 86 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