gpt4 book ai didi

ios - 使用 NSUserDefaults.standardUserDefaults().registerDefaults(Dictionary) 设置默认值的有效方法是什么?

转载 作者:行者123 更新时间:2023-11-30 13:32:18 32 4
gpt4 key购买 nike

我在应用程序中有 4 个相互独立的用户设置。我想使用 NSUserDefaults.standardUserDefaults() 的适当方法检查每个设置的值对于每个键,如果在用户默认值中找不到任何键,则注册默认的预定义值。

我不想打电话NSUserDefaults.standardUserDefaults.registerDefaults(Dictionary<String, AnyObject>)每次应用程序启动时,所以我没有在 AppDelegate.Swift- didFinishLaunchingWithOptions 中使用此方法注册默认值每次启动应用程序时,我都会在 Root View Controller 的 viewDidLoad() 中调用一个方法它运行自定义逻辑来检查每个用户设置。如果用户已保存所有 4 个设置,则无需调用 registerDefaults()如果任何一项设置未保存,请调用registerDefaults()

任何人都可以建议是否有任何有效的方法可以做到这一点或评论我试图实现它的方式? Apple 审核团队会批准我的逻辑吗?

我想摆脱太多IF的。下面是我写的逻辑:-

    let userDefaults = NSUserDefaults.standardUserDefaults() as NSUserDefaults

rate = AVSpeechUtteranceDefaultSpeechRate
speech = true
language = AVSpeechSynthesisVoice.currentLanguageCode()
defaultLanguageName = NSLocale.currentLocale().displayNameForKey(NSLocaleIdentifier, value: language)
bttnEffect = "Pop"

var defaultSpeechSettings: Dictionary<String, AnyObject> = ["speechRate": rate, "speech": speech, "languageCode": language, "defLanguageLabel": defaultLanguageName, "gender": bttnEffect ]

var isSpeechRateSettingLoaded = false
var isSpeechSettingLoaded = false
var isLangSettingLoaded = false
var isBttnEffectSettingLoaded = false

if let theRate: Float = userDefaults.valueForKey("speechRate") as? Float {
rate = theRate
defaultSpeechSettings.removeValueForKey("speechRate")
isSpeechRateSettingLoaded = true
}
if let toggleVal: Bool = userDefaults.valueForKey("speech") as? Bool {
speech = toggleVal
defaultSpeechSettings.removeValueForKey("speech")
isSpeechSettingLoaded = true
}
if let langCode = userDefaults.stringForKey("languageCode") {
language = langCode
defaultSpeechSettings.removeValueForKey("languageCode")
defaultSpeechSettings.removeValueForKey("defLanguageLabel")
isLangSettingLoaded = true
}
if let effectStyle = userDefaults.stringForKey("bttnEffect") {
bttnEffect = effectStyle
defaultSpeechSettings.removeValueForKey("bttnEffect")
isBttnEffectSettingLoaded = true
}
if !(isSpeechRateSettingLoaded && isSpeechSettingLoaded && isLangSettingLoaded && isBttnEffectSettingLoaded) {
NSUserDefaults.standardUserDefaults().registerDefaults(defaultSpeechSettings)
}

最佳答案

Apple 的审核团队并不关心你是否编写了马虎的代码。

请注意 Ken 的评论:如果没有为给定键设置值,则 registerDefaults() 如何仅影响返回值。

除此之外,扩展是驯服 NSUserDefaults 的好方法。

extension NSUserDefaults {
private static let speechRateKey = "speechRate"
var speechRate: Float {
get {
return valueForKey(NSUserDefaults.speechRateKey) as? Float ?? AVSpeechUtteranceDefaultSpeechRate
}
set {
setObject(newValue, forKey: NSUserDefaults.speechRateKey)
synchronize()
}
}
}

// somewhere else:
let speechRate = NSUserDefaults.standardUserDefaults().speechRate
doSomethingWith(speechRate)
NSUserDefaults.standardUserDefaults().speechRate = getNewSpeechRate()

关于ios - 使用 NSUserDefaults.standardUserDefaults().registerDefaults(Dictionary<String, AnyObject>) 设置默认值的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36442569/

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