gpt4 book ai didi

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

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

我正在尝试更新我的“剩余生命:”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 。任何帮助都会很棒。

最佳答案

您的问题位于:

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'

关于您的案例:

GameScene.shipLivesLabel 分配在 GameScene 完全初始化之前使用。

我不喜欢你编写重要游戏属性(例如角色的生命计数器)的方法。请看一下这个答案以更好地理解我的意思:answer

<小时/>

Tibrogargan 在问题评论中给出的另一个建议是不要使用描述:这是一种不好的态度,它用于调试,live 是一个 Int 并且如果你想将这个分配给字符串做:

shipLivesLabel.text = "\(shipLives)"

关于ios - 如何根据实例的属性更新 UILabel 的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38687936/

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