gpt4 book ai didi

swift 。如何为单元格创建自己的初始化程序

转载 作者:行者123 更新时间:2023-11-30 10:10:30 24 4
gpt4 key购买 nike

我有课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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com