【问题标题】:invoke private var to convenience init (swift)调用私有变量以方便初始化(swift)
【发布时间】:2017-11-10 20:58:13
【问题描述】:

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

 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)
        }

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

【问题讨论】:

    标签: swift class sprite-kit skphysicsbody skshapenode


    【解决方案1】:

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

    【讨论】:

    • 不工作,实际上我这里的代码不正确。应该如你所说。我会解决的。
    猜你喜欢
    • 2017-03-20
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 2016-07-27
    相关资源
    最近更新 更多