检查对象实例的属性是否为“空白”

时间:2011-06-02 19:51:19

标签: objective-c cocoa-touch ios uilabel string-comparison

我正在尝试实施以下代码但没有成功。基本上,我想将显示名称设置为使用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仍未显示在屏幕上。

7 个答案:

答案 0 :(得分:5)

我更喜欢

if([thisPhoto.userFullName length])

答案 1 :(得分:3)

使用-length。只要字符串为nil或空字符串@"",这将为0。您通常希望以相同的方式处理这两种情况。

NSString *fullName = [thisPhoto userFullName];
thisUserNameLabel.text = [fullName length]? fullName : [thisPhoto userName];

答案 2 :(得分:2)

如果我假设thisPhoto.userFullNameNSString,您可以尝试

[thisPhoto.userFullName isEqualToString:@""]

答案 3 :(得分:2)

另外两个答案是正确的,并打败了我。而不是仅仅重复他们所说的话 - 我会指出别的东西。

[NSNull null]用于将nil值存储在不允许NSArray的集合类(NSSetNSDictionarynil)中值存储在其中。

因此,除非您检查从集合中获取的值,否则无法检查[NSNull null]

答案 4 :(得分:1)

我在这里看到几点

首先 - 如果您的userFullName实例变量为NSString*,那么与nil进行简单比较就足够了:

if (thisPhoto.userFullName)

当然,除非你明确地将它设置为[NSNull null],然后需要你写的条件。

第二 - 比较字符串是用isEqualToString:方法完成的,所以第二个条件应该重写为:

if ([thisPhoto.userFullName isEqualToString:@""]) {
    ...
}

第三 - 存在逻辑缺陷 - 如果你的userFullName IS等于空字符串(@""),代码仍会落到第一个分支。即空字符串(@"")不等于[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.
}

答案 5 :(得分:1)

// this assumes userFullName and userName are strings and that userName is not nil
thisUserNameLabel.text = [thisPhoto.userFullName length] > 0 ? thisPhoto.userFullName : thisPhoto.userName;

答案 6 :(得分:1)

“空白”表示@"",还有@" "@"\n"。所以我会修剪userFullName并检查该字符串的长度。

if ([[thisPhoto.userFullName stringByTrimmingCharactersInSet:
        [NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0) {

    // it's blank!
}