我正在制作一款 iOS 游戏,并且想要实现 Parse 来跟踪一些值,例如高分和玩过的游戏总数。我希望应用程序在其整个生命周期中为一个用户生成一个对象 ID,并使用相同的 ID 来更新分数的变化。
目前,我的做法是检查 NSUserDefaults.standardUserDefaults 是否已设置,即是否不等于 nil。如果是,则该值不等于字符串“parseObjectIdNotSaved”,然后创建对象 ID。
但是,这会引发错误:
func parseProfileIdExists() {
var profileIdDefault = NSUserDefaults.standardUserDefaults().objectForKey("playerProfileObjectId") as! String
if profileIdDefault != (nil) && ("playerProfileObjectId"){
let defaults = NSUserDefaults.standardUserDefaults()
GameState.sharedInstance.playerProfileObjectId = defaults.stringForKey("playerProfileObjectId")!
} else {
println("This worked")
GameState.sharedInstance.createObjectIdForParse()
}
}
我有一个变量 var playerProfileObjectId = "parseObjectIdNotSaved",我用它来设置一些初始值。 createObjectIdForParse 函数:
func createObjectIdForParse(){
//For Parsing Data
playerProfile["highScore"] = GameState.sharedInstance.highScore
playerProfile.saveInBackgroundWithBlock {
(success: Bool, error: NSError?) -> Void in
if (success) {
// The object has been saved.
GameState.sharedInstance.playerProfileObjectId = self.playerProfile.objectId!
println(" GameVC - Player profile ID is: (GameState.sharedInstance.playerProfileObjectId)")
} else {
println(" Player profile data will be saved eventually")
self.playerProfile.saveEventually()
}
}
}
请建议任何更好的方法来做到这一点。这将是我的第一个应用程序,我没有很强的编程背景。
最佳答案
使用返回选项的函数时,最佳实践是按如下方式分配和检查:
if let profileIdDefault = NSUserDefaults.standardUserDefaults().objectForKey("playerProfileObjectId") as? String {
// object profileIdDefault is the found object with key "playerProfileObjectId"
}
“if let...”基本上尝试将被调用函数的返回值分配给常量“profileIdDefault”。如果返回 nil(未找到),则此 if 条件失败。
关于ios - 如何使用 swift 创建一个用于 Parse 的对象 ID,在 iOS 应用程序生命周期中仅创建一次,然后使用相同的 ID 来更新值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30987271/