Есть несколько значений, которые отличаются от перспективы Objective C здесь:
nil
(иначе null
на других языках)
[NSNull null]
(специальный объект значения маркера)
@""
(пустая строка)
@"null"
(просто строка из 4 символов)
Если вы пишете свой dataDic
из своего приложения и знаете, что ваше приложение хорошо с ним справляется, вам не нужно проверять все случаи. Отметьте только те, которые вы ожидаете. Например, если ваше приложение записывает только непустые строки в словарь, но иногда «email» отсутствует, вам нужно только проверить nil
, потому что objectForKey
возвращает nil
, если значение не находится внутри словаря .
С другой стороны, если вы получили dataDic
от стороннего API, например, декодированного из JSON, то вам следует выполнить полную проверку:
- [NSNull null] помещается в словарь, если JSON имеет
null
, первоначально как {"email":null}
- Если API сервера изменился, вы могли бы получить там другую структуру, чем NSString (хотя здесь это маловероятно).
nil
возвращается, если у вас нет ключа / значения вообще.
Вы можете исключить все 3 проверки одновременно, выполнив:
NSString *emailStr = nil;
id emailObj = [dataDic objectForKey:@"email"];
if ([emailObj isKindOfClass:[NSString class]]) {
emailStr = emailObj;
}
Обратите внимание, что вам может не потребоваться проверять наличие пустой строки или nil перед назначением текста UILabel, поскольку они работают нормально и просто стирают текст метки:
self.emailLbl.text = @"";
self.emailLbl.text = nil; // another way to erase