我正在开发一个IOS应用程序,使用swift和Alamofire库。下面描述了我的网络模型的两个文件,第一个是带有Alamofire管理器会话配置的ApiClient类和两个服务实例,在我的问题中,我只描述了一个Service1结构,在这个结构中,我使用Alamofire路由器请求REST API,我想知道,如何使用管理器会话配置设置默认baseURLString(“https://api.com/v1”)?而不是在每个结构服务中声明它。
ApiClient.swift公司

class ApiClient {

    var OAuthToken = "ZMpMDJhB0egjFIzFhapuWNFSBhX2conQ1e+3vlv0XrJQVcw7fRg=="

    var service1: Service1
    var service2: Service2


    init() {

        let manager = Manager.sharedInstance

        manager.session.configuration.HTTPAdditionalHeaders = [
            "Authorization": "Bearer \(OAuthToken)"
        ]

        service1 = Service1()
        service2 = Service2()
    }


}

服务1.swift
struct Service1 {

    enum Router: URLRequestConvertible {

        static let baseURLString = "https://api.com/v1"

        case GetList([String: AnyObject])
        case GetById(String)
        case Add([String: AnyObject])
        case Update(String, [String: AnyObject])
        case Delete(String)
        case GetListFromPoint([String: AnyObject])

        var method: Alamofire.Method {
            switch self {
            case .GetList:
                return .GET
            case .GetById:
                return .GET
            case .Add:
                return .POST
            case .Update:
                return .PUT
            case .Delete:
                return .DELETE
            case .GetListFromPoint:
                return .GET
            }
        }

        var path: String {
            switch self {
            case .GetList:
                return "/endPoint"
            case .GetById(let id):
                return "/endPoint/\(id)"
            case .Add:
                return "/endPoint"
            case .Update(let id, _):
                return "/endPoint/\(id)"
            case .Delete(let id):
                return "/endPoint/\(id)"
            case .GetListFromPoint:
                return "/near/endPoint"
            }
        }

        var URLRequest: NSURLRequest {
            let URL = NSURL(string: Router.baseURLString)!
            let mutableURLRequest = NSMutableURLRequest(URL: URL.URLByAppendingPathComponent(path))
            mutableURLRequest.HTTPMethod = method.rawValue

            switch self {
            case .GetList(let parameters):
                return Alamofire.ParameterEncoding.URL.encode(mutableURLRequest, parameters: parameters).0
            case .Add(let parameters):
                return Alamofire.ParameterEncoding.JSON.encode(mutableURLRequest, parameters: parameters).0
            case .Update(_, let parameters):
                return Alamofire.ParameterEncoding.JSON.encode(mutableURLRequest, parameters: parameters).0
            case .GetListFromPoint(let parameters):
                return Alamofire.ParameterEncoding.URL.encode(mutableURLRequest, parameters: parameters).0
            default:
                return mutableURLRequest
            }
        }
    }


    func getList(completionHandler: ([Object1]?, NSError?) -> ()) {

        Alamofire.request(Router.GetList(["skip": 0, "limit": 100])).responseJSON { (request, response, json, error) in
             //Converting json to object

    }

    func getById(completionHandler: ([Object1]?, NSError?) -> ()) {

        Alamofire.request(Router.GetById(id)).responseJSON { (request, response, json, error) in
           //Converting json to object

    }


}

最佳答案

我认为你有很多方法可以做到这一点。以下是一些想法。。。
baseURLString存储在APIClient中,并将该值传递给每个Service初始值设定项
创建一个BaseService类,在其中存储服务之间的所有常见类型的信息,如baseURLString、附加头等。
暴露baseURLString中的APIClient,并将APIClient的弱引用传递到每个服务中。
创建一个单独的对象,如AppEnvironment,该对象存储可以通过全局单例或类属性访问的属性,如OAuth info,baseURLString
还有很多方法。希望其中一个想法能激发你的想象力。

关于swift - 使用管理员 session 配置设置默认的baseURLString,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30417040/

10-08 22:43