- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有课FbPostViewCell
它继承了 UITableViewCell
类(class)。来自 FbPostViewCell
我制作其他类(class):FbLinkPostViewCell
。我怎样才能初始化FbPostViewCell
FbLinkPostViewCell
的物质以特定方式对象?我的意思是我需要初始化 FbPostViewCell
的成员FbLinkPostViewCell
的实例对象。
我写了一个convenience init() { super.init() /* stuff */ }
但程序行为向我表明我的成员尚未初始化。与 required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) /* same stuff */ }
的情况相同。我做错了什么?
最佳答案
如果您已将存储的属性添加到子类中,则必须以某种方式启动它们。这意味着您应该:- 将所有添加的属性设为可选,这样它们就可以保持没有值(value)- 给所有属性一个初始值- 添加自定义初始值设定项
这个自定义初始化程序应该只是一个常规的 init,它调用 super.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)
}
}
}
关于 swift 。如何为单元格创建自己的初始化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33178491/
我是一名优秀的程序员,十分优秀!