Нулевая строка с [NSString stringWithFormat:] появляется как “(пустой указатель)”

У меня есть класс 'Контакта' с двумя свойствами: firstName и lastName. Когда я хочу отобразить полное имя контакта, вот то, что я делаю:

NSString *fullName = [NSString stringWithFormat:@"%@ %@", contact.firstName, contact.lastName];

Но когда firstName и/или lastName установлены на ноль, я добираюсь (пустой указатель)"" в строке fullName. Для предотвращения его вот то, что я делаю:

NSString *first = contact.firstName;
if(first == nil)  first = @"";
NSString *last = contact.lastName;
if(last == nil)  last = @"";
NSString *fullName = [NSString stringWithFormat:@"%@ %@", first, last];

Кто-то знает лучше/больше краткий способ сделать это?

18
задан nmondollot 12 March 2010 в 15:04
поделиться

2 ответа

Предполагая, что вас устраивает firstName или ] lastName :

NSString *fullName = [NSString stringWithFormat:@"%@ %@",
    contact.firstName ?: @"", contact.lastName ?: @""];

( a?: b - это расширение GCC , которое означает a? a: b , без оценки a дважды.)

58
ответ дан 30 November 2019 в 05:53
поделиться

NSString * fullName = [NSString stringWithFormat: @ "% @% @", первый? первый Последний ? last: @ ""]; , безусловно, немного короче, но в нем та же ошибка, что и в исходном коде, а именно: fullName будет "firstName" или "lastName" (обратите внимание на пробелы), если один или другого не существовало. Таким образом, вы вынуждены писать код вроде

NSMutableString* fullName = [NSMutableString string];
if( contact.firstName ) { [fullName appendString:contact.firstName]; }
if( contact.firstName && contact.lastName ) { [fullName appendString:@" "]; }
if( contact.lastName ) { [fullName appendString:contact.lastName]; }
return fullName;

, чтобы он работал правильно.

7
ответ дан 30 November 2019 в 05:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: