Попытка создать свой собственный подкласс SCNGeometry
, аналогичный тому, как в фреймворке есть SCNBox
, SCNPyramid
, SCNCapsule
и т. д. Я уже создал свои исходные массивы и массивы элементов, но ниже приведен удобный инициализатор, а не назначенный!
public convenience init(
sources. : [SCNGeometrySource],
elements : [SCNGeometryElement]?)
Единственный, о котором я знаю, это super.init()
, но если вы используете его, исходники и элементы доступны только для чтения.
Неудачная попытка
Я попытался просто вызвать super.init()
, а затем переопределить свойства sources
и elements
своими собственными массивами, но безрезультатно.
Примечание. Это те же самые два массива, которые я передаю в инициализатор удобства выше непосредственно на SCNGeometry
вместе с настройкой материалов, и это работает отлично, поэтому я знаю, что все массивы верны. . Однако это не работает, поэтому в этом удобном инициализаторе явно происходит что-то еще, но я не вижу, что именно.
Очень жаль, что Apple на самом деле не показывает вам источник таких вещей и не имеет хорошей документации по этому поводу. Я имею в виду, что они помечают SCNGeometry
как open
, но затем не дают вам никакой информации о том, как на самом деле его использовать, и так много документов API совершенно пусты!
class TestGeometry : SCNGeometry {
override init(
sources : [SCNGeometrySource],
elements : [SCNGeometryElement],
materials : [SCNMaterials]){
self.mySources = sources
self.myElements = elements
super.init()
self.materials = materials
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private let mySources : [SCNGeometrySource]
private let myElements : [SCNGeometryElement]
override var sources : [SCNGeometrySource] { mySources }
override var elements : [SCNGeometryElement] { myElements }
}
Обходной путь
Я уже заполнил всю информацию, чтобы успешно создать свои источники и элементы (опять же, те же самые, которые я пытался передать в мой вышеприведенный класс), и подтвердил, что он работает и правильно отображает, используя удобный инициализатор, затем свойство материалов, поэтому технически я мог бы обернуть все это в статической фабричной функции и покончить с этим, но я действительно хочу следовать API Apple здесь, где вы создаете экземпляр геометрии с помощью инициализатора, а не фабричной функции, поэтому я не хочу просто позволять этому идти. Это действительно воняет, когда все шаги со 2 по 'n' успешно завершены, только чтобы полностью споткнуться на шаге один... инициализация!
Итак, что такое назначенный инициализатор для SCNGeometry
, который позволяет мне указывать свои собственные вершины и материалы и т. д., и если для этого нет такого, как указать эту информацию при использовании super.init()
?