My class representing a person has a method to calculate that person's age:
@interface Student : NSObject
@property (strong) NSDate *dob;
// This method will work out the person's age in calendar years
- (NSDateComponents*)ageCalculation:(NSDate*)dob;
Here is the class implementation file
@implementation Student
- (NSDateComponents*)ageCalculation:(NSDate*)dob {
NSDate *now = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSCalendarUnit units = NSYearCalendarUnit | NSMonthCalendarUnit;
NSDateComponents *components = [calendar components:units
fromDate:dob
toDate:now
options:0];
return components;
}
@end
I'm not sure that I'm doing this right, though:
Student *student1 = [[Student alloc] init];
[student1 setDob:aDateOfBirth];
NSDateComponents *ageComponents = [student1 ageCalculation:aDateOfBirth];
What should I do with the result of this method? How can I make ageCalculation:
use the date I already set?
There are a couple of things that can be noted. First of all, the code for computing the age is fine, except that I don't understand why you return
NSDateComponents
instead of just the age in years.Here's how I would do it
You are interested only in the
year
component, so return it instead ofNSDateComponents
. Usingself.dob
instead of an argument gets the date you set earlier.Just created a simple method that returns the age in years as a string.
NOTE
NSString *yearsOldinString = [self getAge:dateOfBirth];
, where dateOfBirth represents person's date of birth in NSDate format.