gpt4 book ai didi

swift - didSet 观察者在初始化属性时不会被调用

转载 作者:搜寻专家 更新时间:2023-11-01 06:11:41 24 4
gpt4 key购买 nike

给定以下类(class),

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观察者应该在 position 时设置 SpriteKit 节点的位置属性被修改,我认为不是使用 didSet 中包含的同一行代码块,我可以改为触发后者,但它似乎不起作用;当场景创建时(在主 GameScene 中,它只是创建一个 Spaceship 对象并将 spaceship.node 添加到场景的子节点),node的位置好像是0; 0 .

关于为什么会发生这种情况的任何线索?谢谢。

更新:虽然 defer语句有效,赋值不允许使用它。

最佳答案

与其使用 didSet 更新您的节点,不如直接将查询转发给它:

class Spaceship {

let node: SKSpriteNode

init(frame: CGRect) {
self.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)
}

var position: CGPoint {
get { return node.position }
set { node.position = newValue }
}
}

关于swift - didSet 观察者在初始化属性时不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55049941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com