我有一个继承..., Converter={StaticResource BoolToVis}}"
类的类FbPostViewCell
。从UITableViewCell
开始,我制作了其他课程:FbPostViewCell
。如何以特定方式初始化FbLinkPostViewCell
FbPostViewCell
对象的内容?我的意思是我需要初始化FbLinkPostViewCell
FbPostViewCell
对象实例的成员。
我写了FbLinkPostViewCell
,但程序行为向我显示我的成员没有初始化。与convenience init() { super.init() /* stuff */ }
相同的情况。我做错了什么?
答案 0 :(得分:1)
如果已将存储的属性添加到子类,则必须以某种方式启动它们。这意味着您应该: - 使所有添加的属性可选,这样他们就可以保持无价值 - 为所有属性提供初始值 - 添加自定义初始化程序
这个自定义初始化程序应该只是一个调用super.init()并初始化所有属性的常规init。如果添加了此init,则可以始终使用自己的便利初始化程序创建子类类型的对象。但是这个便利初始化程序应该调用self.init()。
希望这有助于Apple Swift指南中的相关页面: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)
}
}
}