使用Swift 5从Settings.bundle检索切换开关的值

使用Swift 5从Settings.bundle检索切换开关的值,swift,toggle,Swift,Toggle,每当代码运行时。正在检索的值始终为false。正如您在图中所看到的,默认值为YES(在应用程序首次安装时,它应该为true,直到用户将其更改为NO) 使用设置包时: 设置包中的“默认值”仅由iOS设置应用程序使用,而不由您的应用程序使用。 “切换开关的默认值”表示,如果尚未设置用户默认值(无论是YES还是no),则将切换显示为打开 您需要在自己的应用程序中执行一些操作,以便如果用户没有为此键选择默认值,您也可以将其视为是,以便它与设置包中的“默认值”匹配 一种可能性是,而不是 let sfx:

每当代码运行时。正在检索的值始终为false。正如您在图中所看到的,默认值为YES(在应用程序首次安装时,它应该为true,直到用户将其更改为NO)


使用设置包时:

设置包中的“默认值”仅由iOS设置应用程序使用,而不由您的应用程序使用。 “切换开关的默认值”表示,如果尚未设置用户默认值(无论是
YES
还是
no
),则将切换显示为打开

您需要在自己的应用程序中执行一些操作,以便如果用户没有为此键选择默认值,您也可以将其视为是,以便它与设置包中的“默认值”匹配

一种可能性是,而不是

let sfx: Bool = UserDefaults.standard.bool(forKey: SettingsBundleKeys.SFX)
您可以使用objectForKey,它将返回nil,然后您将知道如何使用“default default”,并且可以表现为
YES
已被设置为值。(这类事情可以通过在用户默认设置上使用属性包装来实现)但苹果说的是:

应用程序调用UserDefault的registerDefaults:didFinishLaunchingWithOptions:


这样,您的应用程序和设置应用程序就与“默认默认值”(用于未注册用户默认值的密钥的值)同步,然后
bool(forKey:SettingsBundleKeys.SFX)
将返回
YES
即使尚未为
SFX
键设置任何用户默认值,setingsbundlekeys.SFX的值是多少?这只是一个在我的根目录中保存标识符值的结构。plist是否从应用程序调用UserDefault的registerDefaults:didfishlaunchwithoptions?我不知道它是斯威夫特仍然需要。我曾经用ObjC做过。我确实在应用程序中调用了它:didFinishLaunchingwithoptions userdefaults.standard.register我需要用显式定义的默认值注册我的模型吗?我认为在plist中设置默认值的全部目的是为了节省一些时间,所以我们不必这样做?
struct SettingsBundleKeys {
    static let Reset = "RESET_APP_KEY"
    static let Music = "MUSIC_PREFERENCE"
    static let SFX = "SFX_PREFERENCE"
    static let BuildVersionKey = "build_preference"
    static let AppVersionKey = "version_preference"
}
let sfx: Bool = UserDefaults.standard.bool(forKey: SettingsBundleKeys.SFX)