Подтвердить что ты не робот

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

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

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

    if userDefaults.objectForKey(kUSERID) {
        return true
    }

    return false
}

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

4b9b3361

Ответ 1

У Астуна есть отличный ответ. См. Ниже версию Swift 3.

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

Ответ 2

Я копировал/вставлял ваш код, но Xcode 6.1.1 выбрасывал некоторые ошибки на моем пути, и это выглядело так, и оно работает как шарм. Спасибо!

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

Ответ 3

Да, это правильный способ проверить optional have nil или любое значение objectForKey метод возвращает AnyObject?, который равен Implicit optional.

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

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

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

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

Reset ваш симулятор проверяйте этот метод перед установкой ключа в userDefaults или удалите ключ userDefaults.removeObjectForKey(kUSERID) из userDefaults  и он вернет NO. На устройствах это разрешено в iOS8 beta4.

Ответ 4

Простой код, чтобы проверить, сохранено ли значение в 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")
}

Ответ 5

Это по существу то же самое, что предложено в других ответах, но более удобным способом (Swift 3 +):

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

Ответ 6

для быстрого 3.2

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