Учитывая следующий класс,
class Spaceship {
var position: CGPoint! {
didSet {
node.position = position
}
}
var node: SKSpriteNode!
init(frame: CGRect) {
node = SKSpriteNode(
color: UIColor.red,
size: CGSize(
width: frame.size.width / 5,
height: frame.size.width / 5
)
)
self.position = CGPoint(x: frame.midX, y: frame.midY)
}
}
похоже, что didSet
наблюдатель свойства position
не вызывается.
Поскольку наблюдатель didSet
должен установить положение узла SpriteKit при изменении свойства position
, я подумал, что вместо использования той же строки кода, содержащейся в блоке didSet
, я мог бы вместо этого запустить последний, но это не похоже на работу; когда сцена создается (в основном GameScene, который просто создает Spaceship
объекты и добавляет spaceship.node
к дочерним узлам сцены), позиция node
выглядит как 0; 0
.
Любая подсказка, почему это происходит? Спасибо.
Обновление: хотя оператор defer
работает, назначение не позволяет использовать его.