我正在尝试实现下面的代码而没有成功。基本上,我想将显示名称设置为使用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.
}

08-18 19:15