要从NSUserDefaults
获取值,我会执行以下操作:
let userDefaults = NSUserDefaults.standardUserDefaults()
if let value = userDefaults.objectForKey(key) {
print(value)
}
但是,这些方法不会返回选项:
boolForKey
(如果未设置,则默认为false
)integerForKey
(如果未设置,则默认为0
)floatForKey
(如果未设置,则默认为0.0
)doubleForKey
(如果未设置,则默认为0.0
)在我的应用程序中,如果先前已设置,我想使用保存的整数值。如果之前没有设置,我想使用我自己的默认值。问题是0
是我的应用程序的有效整数值,所以我无法知道0
是否是以前保存的值,或者它是否是默认的未设置值。
我该如何处理?
答案 0 :(得分:3)
在AppDelegate中注册用户默认值,最佳位置为awakeFromNib
甚至init
。您可以为每个密钥提供自定义默认值。
override init()
{
let defaults = NSUserDefaults.standardUserDefaults()
let defaultValues = ["key1" : 12, "key2" : 12.6]
defaults.registerDefaults(defaultValues)
super.init()
}
然后你可以从任何地方读取值作为非选项
let defaults = NSUserDefaults.standardUserDefaults()
myVariable1 = defaults.integerForKey("key1")
myVariable2 = defaults.doubleForKey("key2")
答案 1 :(得分:3)
您可以使用objectForKey
(返回可选项)并使用as?
可选择将其投放到Int
。
if let myInteger = UserDefaults.standard.object(forKey: key) as? Int {
print(myInteger)
} else {
print("no value was set for this key")
}
Bool
,Float
和Double
的解决方案可以采用相同的方式。
注意:强>
我建议使用接受的答案并设置默认值,而不是在可能的情况下投射通用对象。
答案 2 :(得分:0)
答案 3 :(得分:0)
本文非常详细地介绍如何“制作”它们可选http://radex.io/swift/nsuserdefaults/
extension NSUserDefaults {
class Proxy {
var object: NSObject? {
return defaults.objectForKey(key) as? NSObject
}
var number: NSNumber? {
return object as? NSNumber
}
var int: Int? {
return number?.integerValue
}
var bool: Bool? {
return number?.boolValue
}
}
}
答案 4 :(得分:-1)
使用此代码
let userDefaults = NSUserDefaults.standardUserDefaults()
if var value : Int = userDefaults.objectForKey(key) {
print(value)
}