我正在开发一个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/