web-dev-qa-db-de.com

Überprüfen Sie, ob UserDefault vorhanden ist - Swift

Ich versuche zu überprüfen, ob die Standardeinstellung eines Benutzers vorhanden ist (siehe unten):

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

    if userDefaults.objectForKey(kUSERID) {
        return true
    }

    return false
}

Egal, was es immer zurückgibt, auch wenn das Objekt noch nicht existiert? Ist dies der richtige Weg, um die Existenz zu überprüfen?

66
Ryan

Astun hat eine gute Antwort. Siehe unten für die Swift 3 Version.

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

Ich habe Ihren Code kopiert/eingefügt, aber Xcode 6.1.1 hat mir einige Fehler zugefügt. Es sah dann so aus und funktioniert wie ein Zauber. Vielen Dank!

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

Ja, dies ist der richtige Weg, um zu überprüfen, ob die Methode optionalnil oder ein beliebiger Wert objectForKeyAnyObject? Zurückgibt, also Implicit optional.

Wenn also userDefaults.objectForKey(kUSERID) einen Wert hat, wird true ausgewertet. Wenn userDefaults.objectForKey(kUSERID) den Wert nil hat, wird false ausgewertet.

Von Swift Programmierung Anleitung

If-Anweisungen und erzwungenes Auspacken Mit einer if-Anweisung können Sie herausfinden, ob ein optionales Element einen Wert enthält. Wenn ein optionaler Wert vorhanden ist, wird er als wahr ausgewertet. Wenn es überhaupt keinen Wert hat, wird es mit false bewertet.

Jetzt gibt es einen Fehler in den Simulatoren, der auftritt, wenn nach dem Festlegen der Taste userDefaults immer gesetzt bleibt, unabhängig davon, ob Sie Ihre App löschen. Sie müssen den Simulator zurücksetzen.

Setzen Sie Ihren Simulator zurück Überprüfen Sie diese Methode, bevor Sie die Taste userDefaults eingeben, oder entfernen Sie die Taste userDefaults.removeObjectForKey(kUSERID) von userDefaults und es wird NO zurückgegeben. Auf Geräten wird es in iOS8 beta4 aufgelöst.

21
codester

Dies ist im Wesentlichen das Gleiche wie in anderen Antworten, jedoch auf bequemere Weise (Swift 3+):

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

Einfacher Code, um zu überprüfen, ob der Wert in UserDefault gespeichert ist.

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

für Swift 3.2

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