Big*_*tor 33 nsuserdefaults uiswitch ios swift
我有一个名为soundSwitch的开关,我正在使用用户默认值保存按钮的状态:
@IBAction func soundsChanged(sender: AnyObject) {
if soundSwitch.on{
defaults.setBool(true, forKey: "SoundActive")
print("Sound ON")
}else{
defaults.setBool(false, forKey: "SoundActive")
print("Sound OFF")
}
}
Run Code Online (Sandbox Code Playgroud)
当前,当用户首次启动应用程序时,实际默认值最初为false.
如果用户首次启动应用程序并且尚未配置它,我如何将默认值实现为true.
我在Objective-C中看过方法,但在Swift中没有.从我所看到的你可以在app中委托一些方法,或者在plist文件中.我该怎么办?
小智 55
Swift 3语法示例
注册一个布尔默认值:
UserDefaults.standard.register(defaults: ["SoundActive" : true])
Run Code Online (Sandbox Code Playgroud)
并获得价值:
UserDefaults.standard.bool(forKey: "SoundActive")
Run Code Online (Sandbox Code Playgroud)
旁注:虽然上面的代码将返回true,但请注意,在您设置之前,该值实际上并未写入磁盘:
UserDefaults.standard.set(true, forKey: "SoundActive")
Run Code Online (Sandbox Code Playgroud)
fs_*_*gre 17
didFinishLaunchingWithOptions
从AppDelegate 将其添加到您的方法中.正如其他一些人所指出的那样,尽量不要滥用这种方法.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
/// Here you can give default values to your UserDefault keys
UserDefaults.standard.register(defaults: [
"SoundActive": true,
"someOtherKey": "Some Message"
])
}
Run Code Online (Sandbox Code Playgroud)
使用"registerDefaults"可以设置NSUserDefaults的默认值
let userDefaultsDefaults = [
"SoundActive" : true
]
NSUserDefaults.standardUserDefaults().registerDefaults(userDefaultsDefaults)
Run Code Online (Sandbox Code Playgroud)
注意:在didFinishLaunchingWithOptions中写入此内容,因此设置了默认值.
在下面写下您要检查的代码
let onoroff = NSUserDefaults.standardUserDefaults().objectForKey("SoundActive") as! Bool!
if (onoroff != nil && onoroff == false)
{
self.checkForAgreement()
}
Run Code Online (Sandbox Code Playgroud)
没有任何 swift 或应用程序委托特定的内容。
初始默认值是通过调用实例来设置registerDefaults:
的standardUserDefaults
。
您可以多次进行此调用,我建议您不要在应用程序委托中执行此操作,而是在应用程序中的适当时间注册适当的详细信息,因此,如果您有 1 个使用某些默认值的视图控制器/子系统,那么将默认值注册为该代码初始化的一部分。
仅当您有代码的多个不同部分使用的内容时,您才应考虑在应用程序委托中执行此操作,并且仅当您没有其他合适的控制器来执行此操作时。
斯威夫特4
我更喜欢实现类似于如果未设置值则UserDefaults.string(forKey: )
返回的函数nil
。结合?? 运算符,除非您稍后明确设置它们,否则无需将任何默认值写入磁盘。
extension UserDefaults {
public func optionalInt(forKey defaultName: String) -> Int? {
let defaults = self
if let value = defaults.value(forKey: defaultName) {
return value as? Int
}
return nil
}
public func optionalBool(forKey defaultName: String) -> Bool? {
let defaults = self
if let value = defaults.value(forKey: defaultName) {
return value as? Bool
}
return nil
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以按以下方式检索默认值
let defaults = UserDefaults.standard
let userName = defaults.string(forKey: "Username") ?? "Happy"
let userAge = defaults.optionalInt(forKey: "Age") ?? 21
let isSmart = defaults.optionalBool(forKey: "Smart") ?? true
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
23684 次 |
最近记录: |