2010-03-12 15 views
18

के रूप में दिखाई देता है मेरे पास दो गुणों के साथ 'संपर्क' श्रेणी है: firstName और lastName।[NSString stringWithFormat:] के साथ नील स्ट्रिंग "(शून्य)"

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

लेकिन जब firstName और/या lastName शून्य पर सेट है, मैं एक मिल "(शून्य)" पूरा नाम स्ट्रिंग में: जब मैं एक संपर्क का पूरा नाम प्रदर्शित करना चाहते हैं, यहाँ मैं क्या कर रहा है। इसे रोकने के लिए, मैं यहां क्या करता हूं:

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

क्या कोई ऐसा करने के लिए एक बेहतर/अधिक संक्षिप्त तरीका जानता है? (a दो बार के मूल्यांकन के बिना, a ?: b एक GCC extension जो a ? a : b के लिए खड़ा है।)

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

उत्तर

58

मान लिया जाये कि आप firstName<space> या <space>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; 

जैसे कोड लिखने के लिए मजबूर होना पड़ता है।

+0

महान उदाहरण और उपयोगी लिंक – JSA986

+2

आप पर समझौता करने के लिए, बस बाद में निम्न उपाय अपनाते हैं बिना इस दृष्टिकोण का उपयोग कर सकते हैं FULLNAME = [FULLNAME stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]; –

7

NSString *fullName = [NSString stringWithFormat:@"%@ %@", first ? first : @"", last ? last : @""]; निश्चित रूप से थोड़ा अधिक संक्षिप्त है, लेकिन यह:

1

यहाँ मैं कैसे accompished है ...

NSString *lastName = (NSString *)ABRecordCopyValue(personRef, kABPersonLastNameProperty); 
cell.text = [NSString stringWithFormat:@"%@%@",lastName?[NSString stringWithFormat:@"%@ ",lastName]:@"",(NSString *)ABRecordCopyValue(personRef, kABPersonFirstNameProperty)?:@""]; 
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]]; 
संबंधित मुद्दे