Skip to main content
 首页 » 操作系统

swift之使用 NSUserDefaults 保存高分

2024年01月01日33shanyou

我正在尝试保存游戏的高分。我正在尝试通过 NSUserDefaults 执行此操作。这是我正在使用的代码:

//To save highest score 
var highestScore:Int = 20 
NSUserDefaults.standardUserDefaults().setObject(highestScore, forKey:"HighestScore") 
NSUserDefaults.standardUserDefaults().synchronize() 
 
//To get the saved score 
var savedScore: Int = NSUserDefaults.standardUserDefaults().objectForKey("HighestScore") as Int 
println(savedScore) 

但是我得到一个错误,NSUserDefaults 说“预期的声明”,我不知道如何正确地实现它。 或者我应该为此使用 NSArchiver 吗?如果是这种情况,我该如何实现?

请您参考如下方法:

使用 NSCoding。创建一个 Swift 文件“HighScore”

import Foundation 
 
class HighScore: NSObject { 
 
    var highScore: Int = 0 
 
    func encodeWithCoder(aCoder: NSCoder!) { 
           aCoder.encodeInteger(highScore, forKey: "highScore") 
    } 
 
    init(coder aDecoder: NSCoder!) { 
        highScore = aDecoder.decodeIntegerForKey("highScore") 
    } 
 
    override init() { 
    } 
} 
 
class SaveHighScore:NSObject { 
 
    var documentDirectories:NSArray = [] 
    var documentDirectory:String = "" 
    var path:String = "" 
 
    func ArchiveHighScore(#highScore: HighScore) { 
        documentDirectories = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) 
        documentDirectory = documentDirectories.objectAtIndex(0) as String 
        path = documentDirectory.stringByAppendingPathComponent("highScore.archive") 
 
        if NSKeyedArchiver.archiveRootObject(highScore, toFile: path) { 
            println("Success writing to file!") 
        } else { 
            println("Unable to write to file!") 
        } 
    } 
 
    func RetrieveHighScore() -> NSObject { 
        var dataToRetrieve = HighScore() 
        documentDirectories = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) 
        documentDirectory = documentDirectories.objectAtIndex(0) as String 
        path = documentDirectory.stringByAppendingPathComponent("highScore.archive") 
        if let dataToRetrieve2 = NSKeyedUnarchiver.unarchiveObjectWithFile(path) as? HighScore { 
            dataToRetrieve = dataToRetrieve2 
        } 
        return(dataToRetrieve) 
    } 
} 

然后对于您的 ViewController:

   import UIKit 
 
 
    class ViewController: UIViewController, UITextFieldDelegate { 
        var Score = HighScore() 
 
        override func viewDidLoad() { 
            super.viewDidLoad() 
 
        Score.highScore = 100 
        SaveHighScore().ArchiveHighScore(highScore: Score) 
        var retrievedHighScore = SaveHighScore().RetrieveHighScore() as HighScore 
        println(retrievedHighScore.highScore) 
 
        } 
    }