Skip to content

Instantly share code, notes, and snippets.

@jeremy-w
Created April 3, 2015 15:34
Show Gist options
  • Save jeremy-w/3ee420b583abd5faeb26 to your computer and use it in GitHub Desktop.
Save jeremy-w/3ee420b583abd5faeb26 to your computer and use it in GitHub Desktop.
AppCode can generate all you need for a value object. Wow.
#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
#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