gpt4 book ai didi

swift - 调用私有(private) var 来方便 init (swift)

转载 作者:行者123 更新时间:2023-11-30 12:01:01 26 4
gpt4 key购买 nike

我正在尝试创建一个球的节点类。球应该具有一些物理主体属性 - 因此我创建了一个初始化物理主体属性的函数。另外,我希望用户能够设置球半径(通过circleOfRadius),这是我通过方便的 init 设置的。因此,我将半径 var 设置为私有(private)。问题是我可以将半径设置为私有(private)变量,但随后便利性没有被执行。这是我的代码:

 class BallNode: SKShapeNode {
var radius:CGFloat = 0
private var _R:CGFloat?

override init() {
super.init()
self.setPhysics()

}

var newBallR:CGFloat{
get {
return _R!
}
set {
_R = newValue
self.radius = _R!
print("bsllRRRR:", self.radius)

}
}



convenience init(radius:CGFloat){
self.init(circleOfRadius: radius)
self.radius = radius
print("successful init circle radius", self.radius)
}

func setPhysics() {
self.physicsBody = SKPhysicsBody.init(circleOfRadius: self.radius)
print("physics body is SET with value:", self.radius)
self.physicsBody?.affectedByGravity = true
print("gravity = T")
self.physicsBody?.restitution = 0.2
print("res = 0.2")
}

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch: AnyObject in touches {
let positionOfTouch = touch.location(in: self)


let ball = BallNode(radius:65)
}

我知道我可以通过取消私有(private)半径变量并在便利初始化中声明物理体属性来解决这个问题,但我不确定它是否正确。还有一件事,当我检查代码时_R!得到 65 值,但正如我所说,便利 init 没有执行。有人可以帮我吗?

最佳答案

我认为这是因为你没有调用方便的 init。使用 BallNode(radius:65.0),然后它会被调用,myRadius 将被设置为 65.0 但有什么用,你没有调用 setPhysics() 在您方便的 init 中。

关于swift - 调用私有(private) var 来方便 init (swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47231022/

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