Сравнение необязательного значения типа 'Bool' с 'nil' всегда возвращает true - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть оператор if-else, в котором я проверяю, равно ли значение, полученное по умолчанию для пользователя, нулю или нет:

 if defaults.bool(forKey: "abcd") != nil{
       //Do something
    }
    else{
        //do something else
    }

Но Xcode выдает мне сообщение об ошибке: «Сравнение не необязательное значение типа 'Bool' для 'nil' всегда возвращает true "

Может кто-нибудь объяснить, что здесь происходит и как это исправить?

Ответы [ 3 ]

2 голосов
/ 07 апреля 2020

bool(forKey:) возвращает NON-необязательное значение, которое не может быть nil. Если ключ отсутствует в пользовательских значениях по умолчанию, возвращаемое значение будет false.

. Если вы хотите использовать тринарги лог c здесь (nil / true / false), используйте object(forKey:) для поиска NSNumber, и если есть, возьмите его boolValue.

1 голос
/ 07 апреля 2020

Поскольку

defaults.bool(forKey: "abcd")

вернет false по умолчанию, проверьте Документы , поэтому оно никогда не будет необязательным

Логическое значение, связанное с указанный ключ. Если указанный ключ не существует, этот метод возвращает false.

0 голосов
/ 07 апреля 2020

Забавный c bool (forKey: "abcd") возвращает тип Bool, необязательный.

Это означает, что вы не можете сравнить его с bool, что вы можете сделать просто:

 if defaults.bool(forKey: "abcd") {
   //Do something
} else {
    //do something else
}

Теперь, если ключ существует и имеет истинное значение, он попадет в оператор if, если он не существует или является ложным, он будет go к другому.

Если у вас есть какие-либо сомнения, вы можете Читайте о забаве c в следующей ссылке для разработчиков Apple: Apple: bool (forKey:)

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