如何在swift

时间:2016-04-08 09:30:18

标签: swift global-variables

我有一个有4个部分的琐事游戏/应用程序。我试图在4个部分保持得分,同时也更新总分。我按照这个问题The best way to implement lives and score count in Sprite Kit (static, IoC, other?)并按照OBJ C中编写的教程的链接。试图将教程代码从Obj C转换为Swift - 我想出了这个 -

class Scoring: NSObject {
    var tfscore: Int = 0
    var mcscore: Int = 0
    var mapsscore: Int = 0
    var photoscore: Int = 0
    var overallscore: Int = 0

    class func sharedGameData() -> Self {
        return sharedGameData()
    }
}

然后我可以调用评分项目,例如 -

@IBAction func answerButtonHandler(sender: UIButton) {
    if sender.titleLabel!.text == correctAnswer {
        ayuh()
        truefalsescore += 1
        Scoring.sharedGameData().tfscore = truefalsescore
        Scoring.sharedGameData().overallscore = truefalsescore
    }
}

然而,当我构建并运行时,一旦分数发生变化,我就会在 return sharedGameData() 行中出现错误/崩溃。

我是否正确初始化? 这是从各个部分获取分数并能够添加它们,访问它们的最佳方法吗? 谢谢, 埃里克

2 个答案:

答案 0 :(得分:2)

您将进入无限递归,因为您自己调用了sharedGameData()

请尝试以下方法:

class Scoring {

    static let sharedGameData = Scoring()

    var tfscore: Int = 0
    var mcscore: Int = 0
    var mapsscore: Int = 0
    var photoscore: Int = 0
    var overallscore: Int = 0

    init () {

    }
}

现在,您可以Scoring.sharedGameData.tfscore += 1或代码中的任何位置。

答案 1 :(得分:0)

您可以使用Constants.swift文件放置所有共享变量:

import Foundation

var tfscore: Int = 0
var mcscore: Int = 0
var mapsscore: Int = 0
var photoscore: Int = 0
var overallscore: Int = 0

然后,您可以在代码中的任何位置访问它们。

希望有所帮助