如何检查对象是否是 NSArray 上的最后一个对象



如何检查NSArray上最后一个对象中的对象是否

我试过:

if ([currentStore isEqual:[Stores lastObject]])
{
  //Code
}

但它没有用。

知道吗?

谢谢!

或者试试这个

BOOL lastElement = false;
NSUInteger index = [stores indexOfObject:currentStore];
if (index != NSNotFound)
{
    lastElement = (index == [stores count] - 1);
}

位修改试试这个:

 NSUInteger index = [stores indexOfObject:currentStore];
            if (index == ([stores count]-1))
            {
                NSLog(@"Yes its Last");
            }

如果未重写 isEqual 方法,则 NSObject::isEqual 的基类实现仅检查两个指针是否指向同一地址。

这篇优秀的文章 http://nshipster.com/equality/解释 objc 平等原则

以下示例日志 - 测试存储 - 工作正常

@interface Stores : NSObject
@property (strong, nonatomic) NSString* name;
- (instancetype) initWithName:(NSString*) name;
@end
@implementation Stores
- (instancetype) initWithName:(NSString*) name;
{
    _name = name;
    return self;
}

- (BOOL)isEqualToStores:(Stores*) Stores
{
    if (!Stores)
        return NO;
    if (![_name isEqualToString:Stores.name] )
        return NO;
    return YES;
}
- (BOOL)isEqual:(id)object
{
    if (self == object)
    {
        return YES;
    }
    if (![object isKindOfClass:[Stores class]])
    {
        return NO;
    }
    return [self isEqualToStores:(Stores *)object];
}
@end
-(void) testStores
{
    Stores* last = [[Stores alloc] initWithName:@"5"];
    NSArray* arr = @[
                     [[Stores alloc] initWithName:@"1"],
                     [[Stores alloc] initWithName:@"2"],
                     [[Stores alloc] initWithName:@"3"],
                     [[Stores alloc] initWithName:@"4"],
                     [[Stores alloc] initWithName:@"5"]
                     //last
                    ];
    if ([last isEqual:[arr lastObject]])
    {
        NSLog(@"Testing Stores - works fine");
    }
    else
    {
        NSLog(@"Testing Stores - opps!?1?!?");
    }
}  

相关内容

最新更新