迅速。如何为单元格创建自己的初始值设定项

时间:2015-10-16 19:47:16

标签: swift uitableview

我有一个继承..., Converter={StaticResource BoolToVis}}" 类的类FbPostViewCell。从UITableViewCell开始,我制作了其他课程:FbPostViewCell。如何以特定方式初始化FbLinkPostViewCell FbPostViewCell对象的内容?我的意思是我需要初始化FbLinkPostViewCell FbPostViewCell对象实例的成员。

我写了FbLinkPostViewCell,但程序行为向我显示我的成员没有初始化。与convenience init() { super.init() /* stuff */ }相同的情况。我做错了什么?

1 个答案:

答案 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)
      }
   }
}