官方Apple代码和此处提供的代码之间的区别

时间:2017-01-10 15:43:33

标签: swift sprite-kit

我只想问一下Apple提供的SpriteKit官方更新功能与raywenderlich提供的更新功能有什么区别。我为什么要使用self.lastUpdate时间而不是普通变量?这是我的代码:

import SpriteKit
class GameScene: SKScene {
private var lastUpdateTime: TimeInterval = 0
private var dt: TimeInterval = 0
override func update(_ currentTime: TimeInterval){
    if lastUpdateTime > 0 {
        dt = currentTime - lastUpdateTime
    }
    else {
        dt = 0
    }
    lastUpdateTime = currentTime
    print("\(dt * 1000) in miliseconds since last update")
}}

这是官方功能

import SpriteKit
class GameScene: SKScene {
private var lastUpdateTime : TimeInterval = 0
override func update(_ currentTime: TimeInterval) {
    // Called before each frame is rendered

    // Initialize _lastUpdateTime if it has not already been
    if (self.lastUpdateTime == 0) {
        self.lastUpdateTime = currentTime
    }

    // Calculate time since last update
    let dt = currentTime - self.lastUpdateTime

    // Update entities
    for entity in self.entities {
        entity.update(deltaTime: dt)
    }

    self.lastUpdateTime = currentTime
}

}

1 个答案:

答案 0 :(得分:1)

在您使用它的情况下,self.lastUpdateTimelastUpdateTime之间没有区别。这是个人偏好的问题。

有几种情况需要区分:

  • 如果参数正在遮蔽属性。这通常发生在初始化程序中,例如

    class Foo 
    {
        var property: Int
        init(property: Int)
        {
            self.property = property
        }
    }
    
  • 自我在闭包中是强制性的,以提醒您可能存在强烈的参考周期。

    class Foo
    {
        var property: Int = 1
        func bar()
        {
            DispatchQueue.main.async
            {
                print("\(self.property)") // self required here
            }
        }
    }
    

除此之外,请使用self或不要使用self。在Swift演化的早期阶段,有人建议self强制要求进行财产访问。战斗是漫长而痛苦的,但最终非强制性的一方赢得了争论,所以要把自己打倒。