Swift无法使用常规方法将Int转换为String

时间:2015-07-07 03:34:41

标签: ios swift xcode6

将Int转换为String的一般目的是在每次点击SKSpriteNode时显示“Score”,该值增加1。该手势由GameScene.swift中的GameScene类识别。然后它使用一个名为“variables”的结构将“Score”发送到我的GameViewController,它将通过UILabel显示得分。这是我需要将Int转换为String。简单。除了我尝试的每种方法都以错误结束:致命错误:在展开可选值时意外发现nil 。此外,每当我尝试将“Score”视为可选项(添加'?')时,XCode会给我另一个错误并告诉我将其删除。

TL; DR :我需要将Int转换为String,而通常工作的所有方法都不是。

方法我试过了:

  1. scoreLabel.text = NSNumber(integer: Score).stringValue
  2. scoreLabel.text = "\(Score)"
  3. scoreLabel.text = String(Score)
  4. scoreLabel.text = toString(Score)
  5. scoreLabel.text = "\(Score.description)"
  6. scoreLabel.text = Score.description
  7. scoreLabel.text = "\(NSNumber(integer: Score).stringValue)"
  8. 我还重启了XCode和Mac。我错过了明显的东西吗?请帮助一个菜鸟。

    编辑#1:我忘了提到我在GameScene.swift和GameViewController.swift中都记录了“得分”;两者都返回正确的值。

4 个答案:

答案 0 :(得分:1)

正如Abdul Ahmad建议的那样,我应该使用SKLabelNode而不是UILabel来显示我的分数,因为我是从SKScene的子类中这样做的。我不知道为什么价值无法在我的其他课程中转换(正如Aderis指出的那样,我的所有方法都应该有效),因为我能够使用相同的语法记录它并且我用来尝试设置UILabel文本的方法。

对于任何具有相同问题的未来google:

  1. 检查语法
  2. 在可能更改的每个位置记录值
  3. 尝试使用类似的课程? (我使用SKScene来更改SKLabelNode而不是UILabel的文本)

答案 1 :(得分:1)

问题是快速检查类型。您声明一个可选值并在使用它时。你需要强迫它不是零。

// declare optional variable
var score: Int?

// Use it when you sure not nil
yourLabel.text = String(score!)

我建议您需要设置初始值。

var score: Int = 0

并使用它。

yourLabel.text = String(score)

答案 2 :(得分:1)

您收到的错误不是因为正确的代码,而是因为您的"得分"变量是零。我一直使用的是 - >

scoreLabel.text = "\(Score)"

然后,设置你的"得分"为0,因此其值不能返回为零。

var Score : Int = 0

最后,要显示分数,您应该使用SKLabelNode。

var scoreLabel = SKLabelNode(fontNamed: "American Typewriter")

然后,在didMove(toView)

override func didMove(to view: SKView) {
    scoreLabel.text = "\(Score)"
    scoreLabel.fontColor = UIColor.green
    scoreLabel.fontSize = 30
    scoreLabel.position = CGPoint(x: 0, y: self.frame.height / 4)
    self.addChild(scoreLabel)
}

答案 3 :(得分:0)

试试这个:

    let cast_this_optional_integer = Int(Score!)
    print(String(cast_this_optional_integer))