连接可能为 nil 的字符串的最佳方法是什么

What is best way to concatenate strings that may be nil

您好,我正在尝试连接一些可能为 nil 的字符串变量。具体来说,我正在获取联系人的头衔、名字和姓氏,并希望 assemble 最好的名字,即 John Smith 博士,而不在结果中得到任何空值。

如果我只是这样做:

NSString *title = contact.title;
NSString *first = contact.first;
NSString *last = contact.last;
NSString *bestName = [NSString stringWithFormat: @"%@ %@ %@", title, first,last];

...如果其中任何一个为空,我会在结果中得到一个 (null)。

任何人都可以建议仅在值不为 null 时才包含的有效代码吗?

感谢您的任何建议。

对于您的每个字符串组件,仅当它不是零时才将其添加到 NSMutableArray。然后在数组上使用 [array componentsJoinedByString:" "]

Objective C - How to concatenate an entire array of strings?

或者,您可以执行以下操作,这仍然会留下额外的空格,可能并不理想。对于您要连接的每个字符串:

NSString *prop = obj.prop == nil ? @"" : obj.prop

虽然rikkigibson的回答是正确的,但是语法可以简化为

NSString *prop = obj.prop?:@"";

所以在这种情况下,您可以像这样格式化您的字符串:

NSString *bestName = [NSString stringWithFormat: @"%@ %@ %@", title?:@"", first?:@"",last?:@""];

打印空字符串代替“(null)”。

只是想补充 Rikki Gibson 的回答,有时它很有用的是在 NSArray 中利用 nil-terminate init 方法来处理这些情况,如下所示:

NSString *bestName = [[NSArray arrayWithObjects:contact.title, contact.first, contact.last, nil] componentsJoinedByString:@" "];

那么不管有没有object是nil,只会终止列表。因此您可以确定 1) 它不会崩溃,并且 2) 不会添加额外的 space。 然而,明显的缺点是,如果标题为 nil,则不会附加第一个和最后一个......但如果你能忍受,这种方法非常强大和简单。