2016-10-28 5 views
3

Какой из двух приведенных ниже примеров лучше всего проверить, существует ли ключ boolean в NSUserdefaults?Каков правильный способ проверить, существует ли логический ключ в NSUserdefaults/UserDefaults

1- Это приемлемо?

if NSUserDefaults.standardUserDefaults().boolForKey("myKey"){ 
    print("Key Does Exist") 
} 

2- Это предпочтительный способ?

if (NSUserDefaults.standardUserDefaults().objectForKey("myKey") != nil) { 
    print("Key Does Exist") 
} 
+1

(1) и (2) различны. Первое условие истинно, если существует логическое значение для ключа * и * значение 'true'. См. Документацию: https://developer.apple.com/reference/foundation/userdefaults/1416388-bool. –

+2

Почему вы не регистрируете значения по умолчанию с помощью 'NSUserDefaults.registerDefaults'? – Szu

+0

@MartinR - Я вижу. Является ли второй приемлемой для проверки наличия ключа, независимо от того, какой тип это значение? –

ответ

5

Если вы хотите проверить, если что-то хранится ключ, второй вариант является штраф (Swift 3).

if (NSUserDefaults.standardUserDefaults().object(forKey: "myKey") != nil) { 
    print("Key Does Exist") 
} 

object(forKey:)documentation упоминает, что nil возвращается, если ключ не найден.


Но если вы хотите, чтобы проверить, если что-то хранится ключ, и это на самом деле в Boolean: ни версии хорошо.

  • Первый verifies, если значение Boolean существует и на самом деле является true.
  • Вторая проверяет, существует ли объект, но вы не можете быть уверены, что это Boolean.

Проверьте следующие возможности (Swift 3):

if let boolValue = NSUserDefaults.standardUserDefaults().object(forKey: "myKey"), 
    boolValue is Bool { 
    // Boolean exists 
} 
+0

Я только хочу знать, существует или нет ключ, а не его значение. Спасибо –

+0

@ Dimitri Pavlutin. Чтобы что-то прояснить, второй пример подходит для проверки того, существует ли ключ независимо от его значения, правильно? –

+0

Большое спасибо за разъяснение и за другой пример. Быстрый вопрос, в вашем предложении Swift 3 я бы изменил 'is Bool' для' Double ', если бы я хотел проверить двойник? –

1

Если вы хотите, чтобы проверить, если значение существует вы будете использовать второй метод. Первый метод вы просто проверить значение, если его истинным или ложным Первый метод такой же делает

let booleanValue = NSUserDefaults.standardUserDefaults().boolForKey("myKey") 
    if booleanValue{ 

    } 

Однако второй метод проверяет для значения Хороший способ сделать то, что вы пытаетесь сделать является

if let booleanValue = NSUserDefaults.standardUserDefaults().boolForKey("myKey"){ 
    print(booleanValue)   
} 

это позволит вам получить доступ к булево и дает логическое значение в качестве переменной, которую вы можете играть с