我有一个'Contact'类,它有两个属性:firstName和lastName。 当我想显示联系人的全名时,我就是这样做的:
NSString *fullName = [NSString stringWithFormat:@"%@ %@", contact.firstName, contact.lastName];
但是当firstName和/或lastName设置为nil时,我在fullName字符串中得到一个“(null)”。为了防止它,这就是我所做的:
NSString *first = contact.firstName;
if(first == nil) first = @"";
NSString *last = contact.lastName;
if(last == nil) last = @"";
NSString *fullName = [NSString stringWithFormat:@"%@ %@", first, last];
有人知道更好/更简洁的方法吗?
答案 0 :(得分:58)
假设你对firstName<space>
或<space>lastName
:
NSString *fullName = [NSString stringWithFormat:@"%@ %@",
contact.firstName ?: @"", contact.lastName ?: @""];
(a ?: b
是GCC extension,代表a ? a : b
,未评估a
两次。)
答案 1 :(得分:7)
NSString *fullName = [NSString stringWithFormat:@"%@ %@", first ? first : @"", last ? 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;
让它正常工作。
答案 2 :(得分:1)
以下是我的表现......
NSString *lastName = (NSString *)ABRecordCopyValue(personRef, kABPersonLastNameProperty);
cell.text = [NSString stringWithFormat:@"%@%@",lastName?[NSString stringWithFormat:@"%@ ",lastName]:@"",(NSString *)ABRecordCopyValue(personRef, kABPersonFirstNameProperty)?:@""];
答案 3 :(得分:0)
这就是我做的。它不像其他人那么紧凑,但我觉得它更具可读性(这对我来说总是最重要的)。
它还具有从开头和结尾删除尾随空格的好处。
// Remove any nulls from the first or last name
firstName = [NSString stringWithFormat:@"%@", (firstName ? firstName : @"")];
lastName = [NSString stringWithFormat:@"%@", (lastName ? lastName : @"")];
// Concat the strings
fullName = [NSString stringWithFormat:@"%@ %@", firstName, lastName];
// Remove any trailing whitespace
fullName = NSString *newString = [oldString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];