[英]How to deal with non-optional values in NSUserDefaults in Swift
To get a value from NSUserDefaults
I would do something like this:要从
NSUserDefaults
获取值,我会执行以下操作:
let userDefaults = NSUserDefaults.standardUserDefaults()
if let value = userDefaults.objectForKey(key) {
print(value)
}
However, these methods do not return optionals:但是,这些方法不返回可选项:
boolForKey
(defaults to false
if not set) boolForKey
(如果未设置,则默认为false
)integerForKey
(defaults to 0
if not set) integerForKey
(如果未设置,则默认为0
)floatForKey
(defaults to 0.0
if not set) floatForKey
(如果未设置,则默认为0.0
)doubleForKey
(defaults to 0.0
if not set) doubleForKey
(如果未设置,则默认为0.0
) In my app I want to used the saved value of an integer if it has been previously set.在我的应用程序中,如果之前设置了整数,我想使用它的保存值。 And if it wasn't previously set, I want to use my own default value.
如果之前没有设置,我想使用我自己的默认值。 The problem is that
0
is a valid integer value for my app, so I have no way of knowing if 0
is a previously saved value or if it is the default unset value.问题是
0
是我的应用程序的有效整数值,所以我无法知道0
是以前保存的值还是默认的未设置值。
How would I deal with this?我将如何处理?
You can use objectForKey
(which returns an optional) and use as?
您可以使用
objectForKey
(它返回一个可选的)并使用as?
to optionally cast it to an Int
.可选择将其转换为
Int
。
if let myInteger = UserDefaults.standard.object(forKey: key) as? Int {
print(myInteger)
} else {
print("no value was set for this key")
}
The solutions for Bool
, Float
, and Double
would work the same way. Bool
、 Float
和Double
的解决方案将以相同的方式工作。
Note:笔记:
I recommend going with the accepted answer and setting default values rather than casting a generic object if possible.如果可能,我建议使用接受的答案并设置默认值,而不是强制转换通用对象。
Register the user defaults in AppDelegate, the best place is awakeFromNib
or even init
.在 AppDelegate 中注册用户默认值,最好的地方是
awakeFromNib
甚至init
。 You can provide custom default values for every key.您可以为每个键提供自定义默认值。
override init()
{
let defaults = UserDefaults.standard
let defaultValues = ["key1" : 12, "key2" : 12.6]
defaults.register(defaults: defaultValues)
super.init()
}
Then you can read the values from everywhere always as non-optionals然后你可以从任何地方读取值作为非可选值
let defaults = UserDefaults.standard
myVariable1 = defaults.integer(forKey: "key1")
myVariable2 = defaults.double(forKey:"key2")
您可以使用NSUserDefaults.standardUserDefaults.registerDefaults()
为您的应用注册不是合法值的默认值
This article describes very well how to "make" them Optional http://radex.io/swift/nsuserdefaults/本文很好地描述了如何“制作”它们可选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
}
}
}
Use this code使用此代码
let userDefaults = NSUserDefaults.standardUserDefaults()
if var value : Int = userDefaults.objectForKey(key) {
print(value)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.