我有一个名为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")
}
}
目前,当用户首次启动应用程序时,实际的默认值最初为false。
如果用户首次启动应用程序并且尚未配置,则如何将默认值设置为true。
我见过Objective-C中的方法,但在Swift中没有。从我所看到的你可以在app中委托一些方法,或者在plist文件中。我该怎么做?
答案 0 :(得分:54)
Swift 3语法示例
注册一个布尔默认值:
package main
import (
"fmt"
"time"
)
func main() {
messages := make(chan int)
go func() {
time.Sleep(time.Second * 3)
messages <- 1
}()
go func() {
time.Sleep(time.Second * 2)
messages <- 2
}()
go func() {
time.Sleep(time.Second * 1)
messages <- 3
}()
go func() {
for i := range messages {
fmt.Println(i)
}
}()
go func() {
time.Sleep(time.Second * 1)
messages <- 4
}()
go func() {
time.Sleep(time.Second * 1)
messages <- 5
}()
time.Sleep(time.Second * 5)
}
获取值:
UserDefaults.standard.register(defaults: ["SoundActive" : true])
旁注:虽然上面的代码将返回true,但请注意,在设置之前,该值实际上并未写入磁盘:
UserDefaults.standard.bool(forKey: "SoundActive")
答案 1 :(得分:14)
从AppDelegate将其添加到您的didFinishLaunchingWithOptions
方法中。正如其他一些人指出的那样,尽量不要滥用这种方法。
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"
])
}
答案 2 :(得分:7)
使用&#34; registerDefaults&#34;您可以设置NSUserDefaults的默认值
let userDefaultsDefaults = [
"SoundActive" : true
]
NSUserDefaults.standardUserDefaults().registerDefaults(userDefaultsDefaults)
注意:在didFinishLaunchingWithOptions中写下此内容,因此设置了默认值。
在下面的代码中写下您要检查的代码
let onoroff = NSUserDefaults.standardUserDefaults().objectForKey("SoundActive") as! Bool!
if (onoroff != nil && onoroff == false)
{
self.checkForAgreement()
}
答案 3 :(得分:4)
没有特定的swift或app delegate。
通过调用registerDefaults:
实例上的standardUserDefaults
来设置初始默认值。
您可以多次拨打此电话,我建议您不要在app委托中执行此操作,而是在应用中的适当时间注册相应的详细信息,因此如果您有1个视图控制器/子系统使用某些默认值然后将默认值注册为初始化的一部分(如果该代码。
)只有当你有一些代码的多个不同部分使用的东西时,你应该考虑在app委托中这样做,然后只有你没有其他适当的控制器才能这样做。
答案 4 :(得分:2)
func lastStatus() -> Bool {
let defaultValue = true
if let value = default.valueForKey("SoundActive") {
// then use it
return value as? Bool ?? defaultValue
} else {
// oh, no value?
return defaultValue
}
}
我认为这是使用它的最佳方式。另外register(defaults:)
会有所帮助,但在文档中,Apple建议将其用作fallback
,例如分隔no value
和default value
的情况。取决于你的需要。
答案 5 :(得分:2)
快捷键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
}
}
然后您可以按以下方式获取默认值
let defaults = UserDefaults.standard
let userName = defaults.string(forKey: "Username") ?? "Happy"
let userAge = defaults.optionalInt(forKey: "Age") ?? 21
let isSmart = defaults.optionalInt(forKey: "Smart") ?? true
答案 6 :(得分:0)
如果你真的想这样做,请把它放在AppDelegate中:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let defaults = NSUserDefaults.standardUserDefaults()
if defaults.valueForKey("SoundActive") == nil {
defaults.setBool(true, forKey: "SoundActive")
}
如果只是在一个viewcontroller中使用它,请考虑将代码放在viewDidLoad方法中!
答案 7 :(得分:0)
您可以将所有UserDefaults
逻辑封装到一个属性变量中,该属性变量会自动注册应用程序默认值,并将所有更新保存回用户默认值字典中。如果应用程序的其他部分(除了开关控件之外)也读取或更改此状态,则这特别方便。
Swift 5 -第一部分执行闭包以初始化属性,第二部分是didSet
块,该属性在每次更改属性时都会自动调用。
var soundIsActive: Bool = {
// Register the app default:
UserDefaults.standard.register(defaults: ["SoundActive" : true])
// Initialize the property with the current user default:
return UserDefaults.standard.bool(forKey: "SoundActive")
}()
{
didSet {
// Update user default when the variable is set:
UserDefaults.standard.set(soundIsActive, forKey: "SoundActive")
}
}
答案 8 :(得分:0)
如何设置默认值的通用版本:
enum UserDefaultsKeys: String {
case username = "kUsername"
}
extension UserDefaults {
func optionalValue<T>(forKey key: UserDefaultsKeys) -> T? {
if let value = self.value(forKey: key.rawValue) {
return value as? T
}
return nil
}
}
let username = defaults.optionalValue(forKey: .username) ?? ""
答案 9 :(得分:-1)
把它放在你的&#34; didFinishLaunchingWithOptions&#34;在你的AppDelegate中。
<?php
session_start();
include_once("includes/class.database.php");
if(isset($_SESSION['id'])){
include("ingelogd.php"); //When signed in
}else{
include("inloggen.php"); //when not signed in
}
?>