web-dev-qa-db-ja.com

UserDefaultが存在するかどうかを確認します-Swift

以下に示すユーザーデフォルトが存在するかどうかを確認しようとしています:

func userAlreadyExist() -> Bool {
    var userDefaults : NSUserDefaults = NSUserDefaults.standardUserDefaults()

    if userDefaults.objectForKey(kUSERID) {
        return true
    }

    return false
}

ただし、オブジェクトがまだ存在しない場合でも、常にtrueを返すものは何ですか?これは存在を確認する正しい方法ですか?

66
Ryan

Astunには素晴らしい答えがあります。 Swift 3バージョンについては以下を参照してください。

func isKeyPresentInUserDefaults(key: String) -> Bool {
    return UserDefaults.standard.object(forKey: key) != nil
}
90
user7248923

私はあなたのコードをコピー/ペーストしましたが、Xcode 6.1.1は私のやり方でいくつかのエラーを投げていました。ありがとう!

func userAlreadyExist(kUsernameKey: String) -> Bool {
    return NSUserDefaults.standardUserDefaults().objectForKey(kUsernameKey) != nil
}
28
Astun

はい、これは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で解決されます。

21
codester

これは基本的に他の回答で提案されたものと同じですが、より便利な方法です(Swift 3+):

extension UserDefaults {
    func contains(key: String) -> Bool {
        return UserDefaults.standard.object(forKey: key) != nil
    }
}
10
Sir Codesalot

値が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")
}
4
Sudhi 9135

Swift 3.2の場合

func userAlreadyExist(kUsernameKey: String) -> Bool {
    return UserDefaults.standard.object(forKey: kUsernameKey) != nil
}
2
Johny D Good