我正在尝试实现下面的代码而没有成功。基本上,我想将显示名称设置为使用thisPhoto.userFullName
(如果它不是“空白”),否则显示thisPhoto.userName
。
UILabel *thisUserNameLabel = (UILabel *)[cell.contentView viewWithTag:kUserNameValueTag];
NSLog(@"user full name %@",thisPhoto.userFullName);
NSLog(@"user name %@",thisPhoto.userName);
if (thisPhoto.userFullName && ![thisPhoto.userFullName isEqual:[NSNull null]] )
{
thisUserNameLabel.text = [NSString stringWithFormat:@"%@",thisPhoto.userFullName];
}
else if (thisPhoto.userFullName == @"")
{
thisUserNameLabel.text = [NSString stringWithFormat:@"%@",thisPhoto.userName];
}
当前,即使
userFullName
为空白,我的userName
仍未显示在屏幕上。 最佳答案
我在这里看到几点
首先-如果您的userFullName
实例变量是NSString*
,则与nil
进行简单比较就足够了:
if (thisPhoto.userFullName)
当然,除非您明确将其设置为
[NSNull null]
,然后才需要您编写的条件。第二-比较字符串是使用
isEqualToString:
方法完成的,因此第二个条件应重写为:if ([thisPhoto.userFullName isEqualToString:@""]) {
...
}
第三-存在逻辑缺陷-如果
userFullName
等于空字符串(@""
),该代码仍将落入第一个分支。即空字符串(@""
)不等于[NSNull null]
或简单的nil。因此,您应该写到分支-一个用于处理空字符串和nil,另一个用于普通值。因此,经过一些重构,您的代码将变成这样:thisUserNameLabel.text = [NSString stringWithFormat:@"%@",thisPhoto.userFullName];
if (!thisPhoto.userFullName || [thisPhoto.userFullName isEqualToString:@""]) {
// do the empty string dance in case of empty userFullName.
}