如何根据实例的属性更新UILabel的文本

时间:2016-07-31 20:03:06

标签: ios swift class sprite-kit uilabel

我试图更新我的剩余生命:" UILabel,并且我无法根据类或实例当前变量值进行更新 - 在这种情况下lives。我在以下代码中使用didSet来执行此操作:

Ship类:

class Ship:SKSpriteNode{

    ...

    var lives:Int = 0{
        didSet{
            shipLivesLabel?.text = self.lives.description

        }
    }

GameScene中实例化标签:

class GameScene: SKScene, SKPhysicsContactDelegate {

    private var shipLives = 0 {
        didSet{
            self.shipLivesLabel?.text = aShip.lives.description
        }
    }
    private var shipLivesLabel:SKLabelNode?

以及我将其添加到场景中的位置:

override func didMoveToView(view: SKView) {

    let shipLivesLabel = SKLabelNode(fontNamed: "Times New Roman")
    shipLivesLabel.text = shipLives.description
    shipLivesLabel.fontSize = 14
    shipLivesLabel.position = CGPoint(x:CGRectGetMidX(self.frame)*1.3,y:CGRectGetMidY(self.frame)*0.1)
    self.addChild(shipLivesLabel)
    self.shipLivesLabel = shipLivesLabel

我不确定这是否是正确的解决方法,而且我也不确定如何在shipLivesLabel课程中引用Ship - 我收到错误:Instance member shipLivesLabel cannot be used on type GameScene。任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

您的问题在:

private var shipLives = 0 {
        didSet{
            self.shipLivesLabel?.text = aShip.lives.description
        }
}

在此作业期间,self.shipLivesLabel可能尚未就绪。

那发生了什么?

您尝试将未初始化的类分配给其属性的值。

语法错误

MyClass.variable = 'Foo' 
// error:  Instance member 'variable' cannot be used on type 'MyClass'

语法良好

instanceOfMyClass.variable = 'Foo'

关于你的案例:

<{1}}完全初始化之前使用的{p> GameScene.shipLivesLabel作业。

我不喜欢你写出重要游戏属性的方法,比如角色的生命计数器。请仔细阅读此答案,以便更好地理解我的意思:answer

Tibrogargan在问题评论中提出的另一个建议是不要使用描述:这是一种不好的态度,它用于调试,实时是GameScene,如果你想将这个分配给{{1}做:

Int