I've had wrote and subclassed AFHTTPSessionManager in objective-c thus here is how it looks like :
+ (APIClient *)sharedAPIClient
{
static APIClient *_sharedAPIClient = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_sharedAPIClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:BaseURL]];
});
return _sharedAPIClient;
}
- (instancetype)initWithBaseURL:(NSURL *)url
{
self = [super initWithBaseURL:url];
if (self) {
self.responseSerializer = [AFJSONResponseSerializer serializer];
self.requestSerializer = [AFJSONRequestSerializer serializer];
}
return self;
}
And i could get an instance of this class by :
var objAPIClient = APIClient()
objAPIClient = APIClient.sharedAPIClient()
I've looked at the following resources on stack overflow :
AFHTTPSessionManager subclass swift
Swift - Why init(coder) is required in AFHTTPSessionManager?
By implementing the following code :
let _sharedAPIManager = APIManager(baseURL: NSURL(string: API_URL)!)
class APIManager: AFHTTPSessionManager {
/**
* Singleton service
* (https://github.com/hpique/SwiftSingleton)
*/
class var sharedInstance : APIManager {
return _sharedAPIManager
}
init(baseURL url: NSURL!) {
super.init(baseURL: url, sessionConfiguration: nil)
self.responseSerializer = AFJSONResponseSerializer() as AFJSONResponseSerializer
self.requestSerializer = AFJSONRequestSerializer() as AFJSONRequestSerializer
self.requestSerializer.setValue(API_KEY, forHTTPHeaderField: "X-Api-Key")
self.requestSerializer.setValue("3", forHTTPHeaderField: "X-Api-Version")
}
// this was inserted by XCode
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Is it returning an actual singleton as the init should be private? how do i make an instance of this code ? var x = APIManager.sharedInstance
?
is it wrong to place _sharedAPIManager out of the class ? Does this code works completely like my objective-c version, also in my objective-c implementation it only runs ones ?