переопределить isEqual Objective-C - PullRequest
1 голос
/ 08 октября 2010

Мой класс

@interface sample:NSObject{

   double x;

   double y;

}
@property double x;

@property double y;

-(sample *)initWithX: (double)x andY:(double) Y;


@implementation

@synthesize x,y

-(sample *) initWIthX: (double)x andY:(double)y{

    self = [super init];

    if(self) 
    {

      self.x = x;

      self.y = y; 

    }
     return self;

}

-(BOOL)isEqual:(id)other{

 if(other == self)
   return YES;
 if(!other || ![other isKindOfClass:[self class]])
   return NO;
 return [self isEqualToSample:other];  
}


-(BOOL)isEqualToSample:(sample *) other{

 if(self == other)    
   return YES;

 if (!([self x] ==[other x])) 
   return NO;

 if (!([self y] ==[other y]))   
   return NO;

   return YES;
}

в

return [self isEqualToSample: other]; это показывает предупреждение: 'sample' может не отвечать на '-isEqualToSample'. return возвращает целое число из указателя без приведения.

Ответы [ 2 ]

5 голосов
/ 08 октября 2010

Не относится к предупреждению, но при переопределении -isEqual: вы также должны переопределить hash, так что если [a isEqual: b], то [a hash] == [b hash].

3 голосов
/ 08 октября 2010

Вы должны объявить isEqualToSample до использования.в противном случае компилятор предполагает, что сигнатура селектора принимает / возвращает id.

, поэтому вы можете объявить его в заголовке, в частной категории или поместить реализацию перед isEqual:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...