我有一个超类和多个子类。我想在某些函数中访问父类中的子类属性,因此我不必拥有太多的样板代码。父类永远不会直接实例化。
这可以通过父/子类模式实现,还是应该实现委托模式?
class ParentViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
var parentClassArray: [AnyObject]?
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let result: AnyObject = childClassArray![indexPath.row]
//is this somehow doable or can I only call parentClassArray?
}
}
class ChildViewController: ParentViewController {
var childClassArray: [Product]?
}
更新
这是我提出这个问题的理由,希望它会有所帮助。
我目前在parentClassArray: [AnyObject]?
中使用ParentViewController
,因此我可以支持数组中的多个类。 ParentViewController
具有实现UITableViewDelegate
的方法,这些方法根据数组中对象的类型显示行,处理选择,显示segue等。我宁愿不在ParentViewController
的所有子类中重新实现(复制和粘贴)相同的代码。
我实际上让这个概念部分工作,但是,我得到了随机EXC_BAD_ACCESS
错误,我试图破译它是我的父/子类模式还是其他原因。我已经在这个主题上敲了一个多星期,我愿意现在尝试所有的变化。啊!
因此我的问题是在父类中使用子类的变量。我读过你可以使用这段代码覆盖父类变量,但我不确定它是否是正确的方法。
var childClassArray: [User]?
override var parentClassArray: [AnyObject]? {
get {
return self.childClassArray
}
set {
super.parentClassArray = self.childClassArray
}
}