Проверьте, существует ли UserDefault-Swift
Я пытаюсь проверить, существует ли пользователь по умолчанию, см. ниже:
func userAlreadyExist() -> Bool {
var userDefaults : NSUserDefaults = NSUserDefaults.standardUserDefaults()
if userDefaults.objectForKey(kUSERID) {
return true
}
return false
}
впрочем, не важно, что он всегда будет возвращать true, даже если объект еще не существует? Это правильный способ проверки существования ?
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") }