作为共享实例的设置
问题描述:
我试图做到这一点,所以无论何时应用程序移动到背景或被杀死或无论什么时候保存我的设置。
我想访问并设置属性“useLimits”遍布我的应用程序。作为共享实例的设置
为什么它不起作用?
有没有更好的更优雅的方式来实现这一目标?
import UIKit
class Settings: NSObject
{
static let sharedInstance = Settings()
private let kUseLimits = "kUseLimits"
var useLimits = false
override init()
{
super.init()
NSNotificationCenter.defaultCenter().addObserver(
self,
selector: #selector(Settings.save),
name: UIApplicationWillResignActiveNotification,
object: nil)
let userdefaults = NSUserDefaults.standardUserDefaults()
self.useLimits = userdefaults.boolForKey(kUseLimits)
}
deinit
{
NSNotificationCenter.defaultCenter().removeObserver(self)
save()
}
func save()
{
let userdefaults = NSUserDefaults.standardUserDefaults()
userdefaults.setBool(self.useLimits, forKey: kUseLimits)
userdefaults.synchronize()
}
func reset()
{
self.useLimits = false
save()
}
}
答
我觉得这样的事情将是很好的:
class AppSettings {
private struct Keys {
static let useLimits = "AppSttings.useLimits"
}
static var useLimits: Bool {
set {
NSUserDefaults.standardUserDefaults().setBool(newValue, forKey: Keys.useLimits)
}
get {
return NSUserDefaults.standardUserDefaults().boolForKey(Keys.useLimits)
}
}
static func rest() {
useLimits = false
}
}
附:从iOS 8开始,您无需在NSUserDefault中拨打synchronize()
P.S.S. NSUserDefaults.standardUserDefaults().boolForKey(Keys.useLimits)
将返回false
如果没有这样的对象,如果您需要特定的默认值,请检查对象或使用NSUserDefaults.standardUserDefaults().registerDefaults()
P.S.S.S.它不会影响你的表现了,所以你可以从UD读,只是在里面写上运行,但如果你想太多性能的代码,你可以做这样的事情:
private static var _useLimits: Bool?
static var useLimits: Bool {
set {
NSUserDefaults.standardUserDefaults().setBool(newValue, forKey: Keys.useLimits)
_useLimits = newValue
}
get {
if _useLimits == nil {
_useLimits = NSUserDefaults.standardUserDefaults().boolForKey(Keys.useLimits)
}
return _useLimits!
}
}
或更优雅的电流值:
private static var _useLimits: Bool = NSUserDefaults.standardUserDefaults().boolForKey(Keys.useLimits)
static var useLimits: Bool {
set {
NSUserDefaults.standardUserDefaults().setBool(newValue, forKey: Keys.useLimits)
_useLimits = newValue
}
get {
return _useLimits
}
}
使用应用程序委托... – matt