Created
April 3, 2015 15:34
-
-
Save jeremy-w/3ee420b583abd5faeb26 to your computer and use it in GitHub Desktop.
AppCode can generate all you need for a value object. Wow.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#import <Foundation/Foundation.h> | |
@interface RSLRandomValueObject : NSObject<NSCopying, NSCoding> | |
/* The @property bits are the only code I wrote. */ | |
@property(copy) NSString *name; | |
@property NSNumber *someNumber; | |
@property BOOL supYo; | |
/* Everything else in here and the implementation file | |
* was generate by AppCode, either by the New File | |
* or by picking an option from Code > Generate. | |
*/ | |
- (instancetype)initWithName:(NSString *)name | |
someNumber:(NSNumber *)someNumber | |
supYo:(BOOL)supYo; | |
+ (instancetype)objectWithName:(NSString *)name | |
someNumber:(NSNumber *)someNumber | |
supYo:(BOOL)supYo; | |
- (BOOL)isEqual:(id)other; | |
- (BOOL)isEqualToObject:(RSLRandomValueObject *)object; | |
- (NSUInteger)hash; | |
- (NSString *)description; | |
- (id)copyWithZone:(NSZone *)zone; | |
- (id)initWithCoder:(NSCoder *)coder; | |
- (void)encodeWithCoder:(NSCoder *)coder; | |
@end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#import "RSLRandomValueObject.h" | |
@implementation RSLRandomValueObject | |
- (id)initWithCoder:(NSCoder *)coder | |
{ | |
self = [super init]; | |
if (self) { | |
self.name = [coder decodeObjectForKey:@"self.name"]; | |
self.someNumber = [coder decodeObjectForKey:@"self.someNumber"]; | |
self.supYo = [coder decodeBoolForKey:@"self.supYo"]; | |
} | |
return self; | |
} | |
- (void)encodeWithCoder:(NSCoder *)coder | |
{ | |
[coder encodeObject:self.name forKey:@"self.name"]; | |
[coder encodeObject:self.someNumber forKey:@"self.someNumber"]; | |
[coder encodeBool:self.supYo forKey:@"self.supYo"]; | |
} | |
- (instancetype)initWithName:(NSString *)name | |
someNumber:(NSNumber *)someNumber | |
supYo:(BOOL)supYo | |
{ | |
self = [super init]; | |
if (self) { | |
_name = [name copy]; | |
_someNumber = someNumber; | |
_supYo = supYo; | |
} | |
return self; | |
} | |
+ (instancetype)objectWithName:(NSString *)name | |
someNumber:(NSNumber *)someNumber | |
supYo:(BOOL)supYo | |
{ | |
return [[self alloc] initWithName:name someNumber:someNumber supYo:supYo]; | |
} | |
- (id)copyWithZone:(NSZone *)zone | |
{ | |
RSLRandomValueObject *copy = [[[self class] allocWithZone:zone] init]; | |
if (copy != nil) { | |
copy.name = self.name; | |
copy.someNumber = self.someNumber; | |
copy.supYo = self.supYo; | |
} | |
return copy; | |
} | |
- (NSString *)description | |
{ | |
NSMutableString *description = [NSMutableString stringWithFormat:@"<%@: ", | |
NSStringFromClass( | |
[self class])]; | |
[description appendFormat:@"self.name=%@", self.name]; | |
[description appendFormat:@", self.someNumber=%@", self.someNumber]; | |
[description appendFormat:@", self.supYo=%d", self.supYo]; | |
[description appendString:@">"]; | |
return description; | |
} | |
- (BOOL)isEqual:(id)other | |
{ | |
if (other == self) | |
return YES; | |
if (!other || ![[other class] isEqual:[self class]]) | |
return NO; | |
return [self isEqualToObject:other]; | |
} | |
- (BOOL)isEqualToObject:(RSLRandomValueObject *)object | |
{ | |
if (self == object) | |
return YES; | |
if (object == nil) | |
return NO; | |
if (self.name != object.name && ![self.name isEqualToString:object.name]) | |
return NO; | |
if (self.someNumber != object.someNumber && ![self.someNumber isEqualToNumber:object | |
.someNumber]) | |
return NO; | |
if (self.supYo != object.supYo) | |
return NO; | |
return YES; | |
} | |
- (NSUInteger)hash | |
{ | |
NSUInteger hash = [self.name hash]; | |
hash = hash * 31u + [self.someNumber hash]; | |
hash = hash * 31u + self.supYo; | |
return hash; | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment