NSUserDefaults 在 SpriteKit 中正确存储字符串 Swift
NSUserDefaults properly storing Strings in SpriteKit Swift
所以我设置了一个 NSUserDefault 来在我的 GameViewController 中存储一个字符串
NSUserDefaults.standardUserDefaults().setObject("_1", forKey: "SkinSuffix")
我的想法是它存储一个后缀,我将附加到图像名称的末尾,以保存玩家应该使用的角色皮肤。
当我在我的 GameScene 中调用值时 class 像这样
var SkinSuffix = NSUserDefaults.standardUserDefaults().stringForKey("SkinSuffix")
println(SkinSuffix)
它打印 "Optional("_1")" 而不仅仅是 "_1" 所以当我尝试像这样更改我的图像文件的名称时,它不会加载图像文件
hero = SKSpriteNode(texture: heroAtlas.textureNamed("10Xmini_wizard\(SkinSuffix)"))
我该如何解决这个问题?
那是因为它隐式地是 String
类型的可选 not。您需要将其大小写或在 println
语句中解包可选。
var SkinSuffix = NSUserDefaults.standardUserDefaults().stringForKey("SkinSuffix") as! String
或者在您的 println
中:println(SkinSuffix!)
作为旁注,您应该为变量名使用驼峰命名法。
您可以使用 Optional Binding 结构解包 String。如果值为 nil,这可以避免应用程序崩溃。
if let skinSuffix = NSUserDefaults.standardUserDefaults().stringForKey("SkinSuffix") {
println(skinSuffix)
}
更新: 正如下面评论中正确建议的那样,我将检索到的值放在常量 (let) 中。当我们不需要更改值时,我们应该始终使用常量。这样 Swift 编译器可以进行一些优化并防止我们更改该值。
你可以用“??” Nil Coalescing Operator 帮助你处理 nil,它也
允许您指定默认字符串值。
NSUserDefaults().setObject("_1", forKey: "SkinSuffix")
let skinSuffix = NSUserDefaults().stringForKey("SkinSuffix") ?? ""
println(skinSuffix) // "_1"
所以我设置了一个 NSUserDefault 来在我的 GameViewController 中存储一个字符串
NSUserDefaults.standardUserDefaults().setObject("_1", forKey: "SkinSuffix")
我的想法是它存储一个后缀,我将附加到图像名称的末尾,以保存玩家应该使用的角色皮肤。
当我在我的 GameScene 中调用值时 class 像这样
var SkinSuffix = NSUserDefaults.standardUserDefaults().stringForKey("SkinSuffix")
println(SkinSuffix)
它打印 "Optional("_1")" 而不仅仅是 "_1" 所以当我尝试像这样更改我的图像文件的名称时,它不会加载图像文件
hero = SKSpriteNode(texture: heroAtlas.textureNamed("10Xmini_wizard\(SkinSuffix)"))
我该如何解决这个问题?
那是因为它隐式地是 String
类型的可选 not。您需要将其大小写或在 println
语句中解包可选。
var SkinSuffix = NSUserDefaults.standardUserDefaults().stringForKey("SkinSuffix") as! String
或者在您的 println
中:println(SkinSuffix!)
作为旁注,您应该为变量名使用驼峰命名法。
您可以使用 Optional Binding 结构解包 String。如果值为 nil,这可以避免应用程序崩溃。
if let skinSuffix = NSUserDefaults.standardUserDefaults().stringForKey("SkinSuffix") {
println(skinSuffix)
}
更新: 正如下面评论中正确建议的那样,我将检索到的值放在常量 (let) 中。当我们不需要更改值时,我们应该始终使用常量。这样 Swift 编译器可以进行一些优化并防止我们更改该值。
你可以用“??” Nil Coalescing Operator 帮助你处理 nil,它也 允许您指定默认字符串值。
NSUserDefaults().setObject("_1", forKey: "SkinSuffix")
let skinSuffix = NSUserDefaults().stringForKey("SkinSuffix") ?? ""
println(skinSuffix) // "_1"