Search code examples
swiftafnetworking-2

AFHTTPSessionManager Subclass Singleton with Configuration in Swift


I am trying to make a subclass of AFHTTPSessionManager using Swift. According to the documentation, making a singleton instance of your subclass is recommended. I understand how to make a singleton in Swift, but I need to be able to initialize my singleton with a base URL.

class ZRUserAuthenticationHTTPSessionManager: AFHTTPSessionManager {
  class var sharedManager: ZRUserAuthenticationHTTPSessionManager {

    struct StaticManager {
      static var instance: ZRUserAuthenticationHTTPSessionManager? = nil
      static var onceToken: dispatch_once_t = 0
    }

    if (StaticManager.instance == nil) {
      dispatch_once(&StaticManager.onceToken) {
        StaticManager.instance = ZRUserAuthenticationHTTPSessionManager(baseURL: myURL)
      }
    }

    return StaticManager.instance!
  }
}

How do I allow my singleton instance to be initialized with a configureable parameter?

Thanks


Solution

  • I've figured out how to do this.

    public class func createSharedManager(baseURL: NSURL!) -> ZRUserAuthenticationHTTPSessionManager {
      StaticManager.instance = ZRUserAuthenticationHTTPSessionManager(baseURL: baseURL)
    
      return StaticManager.instance!
    }
    
    public class var sharedManager: ZRUserAuthenticationHTTPSessionManager? {
      return StaticManager.instance
    }
    
    private struct StaticManager {
     static var instance: ZRUserAuthenticationHTTPSessionManager? = nil
    }