我试图在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的新手。
答案 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")并更改值。
这个答案不应被视为用于解决问题的最终答案,我基本上提供了一个基本的构建块替代方案,您可能需要在开发中考虑这个问题。