Проверьте, существует ли UserDefault-Swift


Я пытаюсь проверить, существует ли пользователь по умолчанию, см. ниже:

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

    if userDefaults.objectForKey(kUSERID) {
        return true
    }

    return false
}

впрочем, не важно, что он всегда будет возвращать true, даже если объект еще не существует? Это правильный способ проверки существования ?

6 52

6 ответов:

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 есть nil или любое значение objectForKey возвращает AnyObject? что это Implicit optional.

так что если userDefaults.objectForKey(kUSERID) имеют любое значение, чем он оценивает в true. если userDefaults.objectForKey(kUSERID) и nil значение, чем он оценивает в false.

от быстрого программирования руководство

если заявления и принудительное разворачивание Вы можете использовать оператор if, чтобы узнать, содержит ли необязательный элемент значение. Если необязательный параметр имеет значение, он вычисляется следующим образом true; если он вообще не имеет значения, он оценивается как false.

теперь есть ошибка в симуляторах, чем после установки ключа в userDefaults они всегда остаются независимо от того, как вы удалите ваше приложение.Вам нужно сбросить симулятор.

сброс вашего симулятора проверить этот метод перед установкой ключа в userDefaults или удалить ключ userDefaults.removeObjectForKey(kUSERID) С userDefaults и он вернется 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
}