Хорошо, у меня есть NSDictionary, который содержит логическое значение.Он загружается с сервера и анализируется платформой, и по какой-то причине он в конечном итоге сохраняется как словарь NSCFBoolean (не спрашивайте, все, что я знаю, это то, что метод -class возвращает __NSCFBoolean).
Поскольку NSCFBoolean является частным фреймворком класса , который я не могу использовать напрямую, я делаю ссылку на него:
id myBool = myDict[@"my_bool"];
Теперь самое интересное: оценивать его.Я использовал точку останова и команду "po".Вот результаты:
> po myBool
0
> po [myBool class]
__NSCFBoolean
> po [myBool boolValue]
<nil>
Что за ..?
> po myBool == true
false
> po myBool == false
<nil>
мозг тает
Как это возможно, что == true возвращает false и == false возвращает nil ?
Имею многолетний опыт программированияObjective-C, но я никогда не видел такого странного поведения раньше!Я прочитал несколько статей о различиях между различными логическими типами, их поведением и причудами ( Эта статья на NSHipster довольно интересна), но я не читал ничего, что могло бы объяснить это поведение.