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では何も見ませんでした。私が見たものから、あなたはアプリのデリゲートやplistファイルでそれを行うことができます。これらのいずれかを行うにはどうすればよいですか?
Swift 3の構文例
ブールのデフォルト値を登録します。
UserDefaults.standard.register(defaults: ["SoundActive" : true])
そしてgetの値:
UserDefaults.standard.bool(forKey: "SoundActive")
サイドノート:上記のコードはtrueを返しますが、値は実際にはディスクに書き込まれないことに注意してくださいset it:
UserDefaults.standard.set(true, forKey: "SoundActive")
これを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"
])
}
「registerDefaults」を使用すると、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()
}
Swiftまたはアプリデリゲート固有のものはありません。
初期デフォルトは、standardUserDefaults
インスタンスでregisterDefaults:
を呼び出すことで設定されます。
この呼び出しは複数回行うことができますが、アプリのデリゲートでは実行せず、代わりにアプリで適切な時間に適切な詳細を登録することをお勧めします。そのため、特定のデフォルト値を使用する1つのView Controller/Subsystemがある場合そのコードの場合、初期化の一部としてデフォルト値を登録します。
コードの複数の異なる部分で使用されるものがある場合にのみ、アプリデリゲートでそれを行うことを検討する必要があります。また、他の適切なコントローラーがない場合に限ります。
Swift 4
値が設定されていない場合にnilを返すUserDefaults.string(forKey:)のような関数を実装することを好みます。 ??と組み合わせて演算子を使用すると、後で明示的に設定しない限り、ディスクにデフォルト値を書き込む必要はありません。
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.optionalBool(forKey: "Smart") ?? true
_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は、_no value
_と_default value
_の状況を分離するように、fallback
として使用することを提案します。必要に応じて。
本当にこの方法でやりたい場合は、これをAppDelegateに入れてください。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let defaults = NSUserDefaults.standardUserDefaults()
if defaults.valueForKey("SoundActive") == nil {
defaults.setBool(true, forKey: "SoundActive")
}
1つのViewControllerでのみ使用される場合は、代わりにviewDidLoadメソッドにコードを配置することを検討してください。