以下に示すユーザーデフォルトが存在するかどうかを確認しようとしています:
func userAlreadyExist() -> Bool {
var userDefaults : NSUserDefaults = NSUserDefaults.standardUserDefaults()
if userDefaults.objectForKey(kUSERID) {
return true
}
return false
}
ただし、オブジェクトがまだ存在しない場合でも、常にtrueを返すものは何ですか?これは存在を確認する正しい方法ですか?
Astunには素晴らしい答えがあります。 Swift 3バージョンについては以下を参照してください。
func isKeyPresentInUserDefaults(key: String) -> Bool {
return UserDefaults.standard.object(forKey: key) != nil
}
私はあなたのコードをコピー/ペーストしましたが、Xcode 6.1.1は私のやり方でいくつかのエラーを投げていました。ありがとう!
func userAlreadyExist(kUsernameKey: String) -> Bool {
return NSUserDefaults.standardUserDefaults().objectForKey(kUsernameKey) != nil
}
はい、これはoptional
have nil
または任意の値objectForKey
メソッドがAnyObject?
(Implicit optional
)を返すことを確認する正しい方法です。
したがって、userDefaults.objectForKey(kUSERID)
がtrue
と評価される値よりも大きい場合。 userDefaults.objectForKey(kUSERID)
にnil
値がある場合、false
と評価されます。
Swiftプログラミングから ガイド
Ifステートメントと強制的なラップ解除ifステートメントを使用して、オプションに値が含まれているかどうかを調べることができます。オプションに値がある場合、trueと評価されます。値がまったくない場合、falseと評価されます。
シミュレータにバグがあります。userDefaults
にキーを設定した後は、アプリを削除しても常に設定されたままになります。シミュレータをリセットする必要があります。
シミュレータをリセットしますuserDefaults
にキーを設定する前にこのメソッドをチェックするか、userDefaults
からキーuserDefaults.removeObjectForKey(kUSERID)
を削除します。 return NO
。デバイスでは、iOS8 beta4
で解決されます。
これは基本的に他の回答で提案されたものと同じですが、より便利な方法です(Swift 3+):
extension UserDefaults {
func contains(key: String) -> Bool {
return UserDefaults.standard.object(forKey: key) != nil
}
}
値がUserDefaultに保存されているかどうかを確認する単純なコード。
let userdefaults = UserDefaults.standard
if let savedValue = userdefaults.string(forKey: "key"){
print("Here you will get saved value")
} else {
print("No value in Userdefault,Either you can save value here or perform other operation")
userdefaults.set("Here you can save value", forKey: "key")
}
Swift 3.2の場合
func userAlreadyExist(kUsernameKey: String) -> Bool {
return UserDefaults.standard.object(forKey: kUsernameKey) != nil
}