Swift中

时间:2016-04-07 09:49:40

标签: swift inheritance initialization

我对所需的初始化程序和继承有疑问。

这是我的继承图:

TreeNode
  + ValueNode<ValueType>
    + [final] ConstantNode<ValueType>
    + UnaryNode<OperandType,ResultType>
  + ActionNode
    + [final] SequenceNode
    + [final] LoopNode

在基类TreeNode中,我有两个初始化器(两者都是必需的):

1. public required init(factory: RandomTreeFactory, maximumDepth: Int) 
2. public required init(id: Int, maximumDepth: Int)

通过调用ValueNodeActionNodesuper.init() 转发这些初始值设定项。

ConstantNode中,我实现了这些初始值设定项(请注意第2号和第4号初始值设定项之间签名的更改)。

3. public required init(factory: RandomTreeFactory, maximumDepth: Int)
4. public init(id: Int, maximumDepth: Int, constant: ValueType) 

这是来自Swift的Apple手册的引用:

  

在类初始化程序的定义之前编写required修饰符,以指示该类的每个子类都必须实现该初始化程序。

我的问题是:为什么不能实现初始值设定项。尽管被标记为ConstantNoderequired中的2?

次要问题:当我想在ActionNode的子类(例如SequenceNodeLoopNode)中执行相同操作时,为什么编译器会抱怨?这是因为泛型吗?

提前致谢, 彼得。

0 个答案:

没有答案