Ich versuche zu überprüfen, ob ein Benutzerstandard vorhanden ist (siehe unten):
func userAlreadyExist() -> Bool {
var userDefaults : NSUserDefaults = NSUserDefaults.standardUserDefaults()
if userDefaults.objectForKey(kUSERID) {
return true
}
return false
}
Aber egal was es immer wahr zurückgibt, auch wenn das Objekt noch nicht existiert? Ist dies der richtige Weg, um die Existenz zu überprüfen?
ios
swift
nsuserdefaults
Ryan
quelle
quelle
Ja , das ist richtig das überprüfen
optional
hatnil
oder beliebigen WertobjectForKey
Methode gibt ,AnyObject?
die sindImplicit optional
.Wenn Sie
userDefaults.objectForKey(kUSERID)
also einen Wert haben, der ausgewertet wirdtrue
. WennuserDefaults.objectForKey(kUSERID)
hatnil
Wert als es auswertetfalse
.Von schnellen Programmierung Führung
Jetzt gibt es einen Fehler in Simulatoren, der nach dem Einstellen des Schlüssels
userDefaults
immer gesetzt bleibt, unabhängig davon, ob Sie Ihre App löschen. Sie müssen den Simulator zurücksetzen.Setzen Sie den Simulator dieser Methode überprüfen , bevor Sie Schlüssel in
userDefaults
oder ziehen Sie den SchlüsseluserDefaults.removeObjectForKey(kUSERID)
aus ,userDefaults
und es wird wiederNO
.Auf Geräte es in behoben istiOS8 beta4
.quelle
objectForKey
Methode gibt zurück,AnyObject!
was implizit optional ist" Dies ist falsch, es gibt zurückAnyObject?
if anOptional { }
und es wird vorgeschlagen, dass Sie mit == nil oder! = NilDies ist im Wesentlichen dasselbe wie in anderen Antworten vorgeschlagen, jedoch auf bequemere Weise (Swift 3+):
Verwendung:
if UserDefaults.contains(kUSERID) { ... }
quelle
static func contains(key: String) -> Bool
. Ansonsten macht es mehr Sinnreturn self.object(forKey: key) != nil
Einfacher Code, um zu überprüfen, ob der Wert in UserDefault gespeichert ist.
quelle
für schnelle 3.2
quelle
Oder Sie können diese Bibliothek ausprobieren: Link
quelle
quelle
überschreiben func viewDidLoad () {
super.viewDidLoad ()
if UserDefaults.standard.string (forKey: "CHARRY") == "CHARRY" {
}}
quelle
Viele der hier aufgeführten Lösungen sind gültig. Trotzdem denke ich, dass sie das falsche Problem lösen.
Normalerweise wird Code wie dieser verwendet, um zu überprüfen, ob ein Wert festgelegt ist, damit ein anderer Standardwert verwendet werden kann:
Es sollte Ihnen egal sein, ob ein Schlüssel gesetzt ist oder nicht. Es gibt einen weitaus eleganteren Ansatz für Standardwerte in
UserDefaults
:Wenn Sie diesen Code beim Start der App ausführen, geben nachfolgende Aufrufe von
UserDefaults.standard.string(forKey: "username")
den Standardwert zurück,"No username was set"
wenn für den Schlüssel noch kein Wert festgelegt wurde.quelle