Please read the README in front of this code.
/*
README:
Updated on 13/Oct. I can use self.favoriteList in .m file. Then we can use custom getter here.
1. The implemetation I did for the first time was correct. I used "@property (atomic) NSMutableArray<NSString *> *favoriteList;" in @interface Booking() and it works.
2. I don't need "//@synthesize favoriteList = _favoriteList;" for creating setter and getter, becuase Xcode will create them automaticlly now.
3. I think my implementation is better than having a "@property (atomic) NSMutableArray<NSString *> *favoriteList2;" in .m. Becuase having a favoriteList2 may confuse people. The cons of my implementation is that you may create custom getter and setter so you don't want to use _favoriteList, but for this simple example it should be fine.
*/
//
// Booking.h
// test
//
// Created by allenlinli on 10/11/16.
// Copyright © 2016 Raccoonism. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Booking : NSObject
@property (atomic, readonly) NSArray *favoriteList;
- (void)addFavorite:(NSString *)cityName;
@end
//
// Booking.m
// test
//
// Created by allenlinli on 10/11/16.
// Copyright © 2016 Raccoonism. All rights reserved.
//
#import "Booking.h"
@interface Booking()
@property (atomic) NSMutableArray<NSString *> *favoriteList;
// Li Lin: I don't need to use favoriteList2 for implementing this functionality.
//@property (atomic) NSMutableArray<NSString *> *favoriteList2;
@end
@implementation Booking
- (instancetype)init {
self = [super init];
if (self) {
// [self setFavoriteList: [[NSMutableArray alloc] init]];
_favoriteList = [[NSMutableArray alloc] init];
}
return self;
}
//- (NSMutableArray *)favoriteList {
// if (!_favoriteList) {
// _favoriteList = [[NSMutableArray alloc] init];
// }
//
// return _favoriteList;
//}
//
//- (void)setFavoriteList:(NSMutableArray *)favoriteList {
// self.favoriteList = favoriteList;
//}
- (void)addFavorite:(NSString *)cityName {
// [_favoriteList addObject:cityName];
[self.favoriteList addObject:cityName];
}
// Li Lin: "synthesize" is automatically produced
//@synthesize favoriteList = _favoriteList;
@end
/*
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@end
//
// ViewController.m
// test
//
// Created by allenlinli on 10/11/16.
// Copyright © 2016 Raccoonism. All rights reserved.
//
#import "ViewController.h"
#import "Booking.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
Booking *book = [[Booking alloc] init];
[book addFavorite:@"Seoul"];
[book addFavorite:@"Taipei"];
[book addFavorite:@"Darwin"];
// book.favoriteList = nil;
for (NSString *city in book.favoriteList) {
NSLog(@"city:%@",city);
}
}
@end
*/