gpt4 book ai didi

swift - 设置为共享实例

转载 作者:行者123 更新时间:2023-11-28 11:05:50 24 4
gpt4 key购买 nike

我尝试这样做,以便在应用程序移至后台或被杀死或发生其他情况时保存我的设置。
我想在我的整个应用程序中访问和设置属性“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()

附言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
}
}

关于swift - 设置为共享实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37745838/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com