Person.m 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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. bob->_netWorth = [NSDecimalNumber decimalNumberWithString:@"12345.67"];
  17. return bob;
  18. }
  19. - (void)encodeWithCoder:(nonnull NSCoder *)coder {
  20. [coder encodeObject:self.name forKey:@"name"];
  21. [coder encodeInteger:self.age forKey:@"age"];
  22. [coder encodeDouble:self.height forKey:@"height"];
  23. [coder encodeObject:self.numberOfKids forKey:@"numberOfKids"];
  24. [coder encodeObject:self.netWorth forKey:@"netWorth"];
  25. }
  26. - (nullable instancetype)initWithCoder:(nonnull NSCoder *)coder {
  27. self->_name = [coder decodeObjectForKey:@"name"];
  28. self->_age = [coder decodeIntegerForKey:@"age"];
  29. self->_height = [coder decodeDoubleForKey:@"height"];
  30. self->_numberOfKids = [coder decodeObjectForKey:@"numberOfKids"];
  31. self->_netWorth = [coder decodeObjectForKey:@"netWorth"];
  32. return self;
  33. }
  34. - (void)setNetWorth:(NSDecimalNumber *)netWorth {
  35. _netWorth = netWorth;
  36. }
  37. - (NSUInteger)hash {
  38. return self.name.hash ^ @(self.age).hash ^ self.numberOfKids.hash ^ self.netWorth.hash;
  39. }
  40. - (BOOL)isEqual:(id)object {
  41. if ([object isKindOfClass:[Person class]])
  42. return [self isEqualToPerson:object];
  43. return [super isEqual:object];
  44. }
  45. - (BOOL)isEqualToPerson:(Person *)person {
  46. return [self.name isEqualToString:person.name];
  47. }
  48. + (NSInteger)version {
  49. return 2;
  50. }
  51. @end