Person.m 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. //
  2. // Person.m
  3. // UICatalog
  4. //
  5. // Created by Tanner on 4/17/19.
  6. // Copyright © 2019 f. All rights reserved.
  7. //
  8. #import "Person.h"
  9. @implementation Person
  10. + (id)bob {
  11. Person *bob = [Person new];
  12. bob->_name = @"Bob";
  13. bob->_age = 50;
  14. bob->_height = 5.8;
  15. bob->_numberOfKids = @3;
  16. return bob;
  17. }
  18. - (void)encodeWithCoder:(nonnull NSCoder *)coder {
  19. [coder encodeObject:self.name forKey:@"name"];
  20. [coder encodeInteger:self.age forKey:@"age"];
  21. [coder encodeDouble:self.height forKey:@"height"];
  22. [coder encodeObject:self.numberOfKids forKey:@"numberOfKids"];
  23. }
  24. - (nullable instancetype)initWithCoder:(nonnull NSCoder *)coder {
  25. self->_name = [coder decodeObjectForKey:@"name"];
  26. self->_age = [coder decodeIntegerForKey:@"age"];
  27. self->_height = [coder decodeDoubleForKey:@"height"];
  28. self->_numberOfKids= [coder decodeObjectForKey:@"numberOfKids"];
  29. return self;
  30. }
  31. - (NSUInteger)hash {
  32. return self.name.hash ^ @(self.age).hash ^ self.numberOfKids.hash;
  33. }
  34. - (BOOL)isEqual:(id)object {
  35. if ([object isKindOfClass:[Person class]])
  36. return [self isEqualToPerson:object];
  37. return [super isEqual:object];
  38. }
  39. - (BOOL)isEqualToPerson:(Person *)person {
  40. return [self.name isEqualToString:person.name];
  41. }
  42. + (NSInteger)version {
  43. return 2;
  44. }
  45. @end