如何在SKLabelNode中存储整数值

时间:2017-08-07 08:28:12

标签: ios sprite-kit sklabelnode

我试图在SKLabelNode中存储整数值,但我一直在设置一个只能存储字符串的错误。我以后需要它作为整数。这是我的代码:

import SpriteKit
import GameplayKit

class GameScene: SKScene {

override func didMove(to view: SKView) {

    var comScore = SKLabelNode()
    comScore.fontName = "Pong Score"
    comScore.text = 0
    comScore.fontSize = 100
    comScore.color = SKColor.white
    comScore.position = CGPoint(x: 200, y: 220)
    comScore.zPosition = 3
    addChild(comScore)

}
}

我非常感谢帮助,因为我是SpriteKit的新手。

4 个答案:

答案 0 :(得分:0)

SKLabelNode text属性是字符串,而不是Int。您可以通过添加引号将其设为字符串:

comScore.text = "0"

或者您可以将Int变量转换为字符串:

comScore.text = String(myIntValue)

答案 1 :(得分:0)

我通过将其存储为String initaly,然后使用以下代码来回转换来修复此问题:

var comScoreInt: Int = Int(comScore.text!)!
comScoreInt += 1
comScore.text = String(comScoreInt)

答案 2 :(得分:0)

除了有关Ints和Strings的其他答案之外,如果您在分数上贴上房产观察者,您可以在更新分数时自动更新标签:

var comScoreInt: Int {
   didSet{
      comScore.text = String(comScoreInt)
      }
   }

编辑:

如果根据您自己的答案,您想要从分数标签中的值初始化分数,那么将整数分数作为计算属性:

var comScoreInt -> Int {
   get {
      return Int(comScore.text!)
       }
   set(newScore) {
      comScore.text = String(newScore)
      }
   }

现在您可以检索comScoreInt,它将返回分数标签中的值并设置comScoreInt,它将更新标签。

答案 3 :(得分:0)

Swift 3 扩展程序是你的朋友:

extension String {
    func integerValue() > Int? {
        return Int(trimmingCharacters(.whitespacesAndNewlines))

    }

    static func + (left: String, right: Int) -> String {
        guard let value = left.integerValue() else {return left}
        return "\(value + right)"
    }

    static func += (inout left: String, right: Int) {
        left = left + right
    }
}

现在您可以快速添加到执行label.text += 1

的字符串

你最终会以这种方式失去一些保护措施,因为你通常希望String + Int给你一个错误,所以你可能想要考虑这个过程的安全性,也许你想要子类{{} 1}}到String,以便只能使用Int添加某种类型的字符串, 或者在提供的扩展中添加一些错误处理。

您甚至可以更进一步,从字符串中解析出Int(例如" Points:1")并更改值。

这个答案不应被视为用于解决问题的最终答案,我基本上提供了一个基本的构建块替代方案,您可能需要在开发中考虑这个问题。