В качестве учебного упражнения я пытаюсь реализовать подкласс SKShapeNode
, который предоставляет новый инициализатор удобства, который принимает число и строит ShapeNode, который является квадратом ширины и высоты числа.
В соответствии с Swift Book:
Правило 1
Если ваш подкласс не определяет какие-либо назначенные инициализаторы, он автоматически наследует все его инициализаторы, назначенные суперклассам.
Правило 2
Если ваш подкласс обеспечивает реализацию всех его инициализаторов, назначенных суперклассам, либо путем наследования их в соответствии с правилом 1, либо путем предоставления пользовательской реализации как части определения, то он автоматически наследует все инициализаторы удобства суперкласса ".
Однако следующий класс не работает:
class MyShapeNode : SKShapeNode {
convenience init(squareOfSize value: CGFloat) {
self.init(rectOfSize: CGSizeMake(value, value))
}
}
Вместо этого я получаю:
Playground execution failed: error: <REPL>:34:9: error: use of 'self' in delegating initializer before self.init is called
self.init(rectOfSize: CGSizeMake(value, value))
^
<REPL>:34:14: error: use of 'self' in delegating initializer before self.init is called
self.init(rectOfSize: CGSizeMake(value, value))
^
<REPL>:35:5: error: self.init isn't called on all paths in delegating initializer
}
Я понимаю, что MyShapeNode
должен наследовать все инициализаторы удобства SKShapeNode
, потому что я не выполняю никаких собственных инициализаторов, и потому что мой инициализатор удобства вызывает init(rectOfSize)
, другой удобный инициализатор, это должно работать. Что я делаю неправильно?