Swift 使用manager会话配置设置默认baseURLString
我正在用swift和Alamofire库开发一个IOS应用程序。我的网络模型的两个文件如下所述,第一个是带有Alamofire manager会话配置的ApiClient类和两个服务实例,在我的问题中,我只描述一个,Service1结构,在这个结构中,我使用Alamofire路由器向REST API请求,我想知道,如何使用manager会话配置设置默认baseURLString(“”)?而不是在每个结构服务中声明它 斯威夫特酒店Swift 使用manager会话配置设置默认baseURLString,swift,alamofire,Swift,Alamofire,我正在用swift和Alamofire库开发一个IOS应用程序。我的网络模型的两个文件如下所述,第一个是带有Alamofire manager会话配置的ApiClient类和两个服务实例,在我的问题中,我只描述一个,Service1结构,在这个结构中,我使用Alamofire路由器向REST API请求,我想知道,如何使用manager会话配置设置默认baseURLString(“”)?而不是在每个结构服务中声明它 斯威夫特酒店 类ApiClient{ var OAuthToken=“zmpdj
类ApiClient{
var OAuthToken=“zmpdjhb0egjfizfapuwnfsbhx2conq1e+3vlv0XrJQVcw7fRg=”
var service1:service1
var service2:service2
init(){
让manager=manager.sharedInstance
manager.session.configuration.HTTPAdditionalHeaders=[
“授权”:“持有人\(OAuthToken)”
]
service1=service1()
service2=service2()
}
}
服务1.swift
结构服务1{
枚举路由器:URLrequestConverable{
静态let baseURLString=”https://api.com/v1"
case GetList([String:AnyObject])
大小写GetById(字符串)
案例添加([字符串:AnyObject])
案例更新(字符串[String:AnyObject])
案例删除(字符串)
大小写GetListFromPoint([String:AnyObject])
var方法:阿拉莫菲尔方法{
切换自身{
case.GetList:
回来,快
case.GetById:
回来,快
案例。添加:
回邮
案例。更新:
返回,放
案例.删除:
返回。删除
case.GetListFromPoint:
回来,快
}
}
变量路径:字符串{
切换自身{
case.GetList:
返回“/端点”
case.GetById(let id):
返回“/endPoint/\(id)”
案例。添加:
返回“/端点”
case.Update(let id,u):
返回“/endPoint/\(id)”
案例。删除(让id):
返回“/endPoint/\(id)”
case.GetListFromPoint:
返回“/near/endPoint”
}
}
var URLRequest:NSURLRequest{
让URL=NSURL(字符串:Router.baseURLString)!
让mutableURLRequest=NSMutableURLRequest(URL:URL.URLByAppendingPathComponent(path))
mutableURLRequest.HTTPMethod=method.rawValue
切换自身{
case.GetList(let参数):
返回Alamofire.ParameterEncoding.URL.encode(mutableURLRequest,参数:parameters)。0
case.Add(let参数):
返回Alamofire.ParameterEncoding.JSON.encode(mutableURLRequest,参数:parameters)。0
case.Update(quot,let参数):
返回Alamofire.ParameterEncoding.JSON.encode(mutableURLRequest,参数:parameters)。0
case.GetListFromPoint(let参数):
返回Alamofire.ParameterEncoding.URL.encode(mutableURLRequest,参数:parameters)。0
违约:
返回可变URL请求
}
}
}
func getList(completionHandler:([Object1]?,NSError?->()){
请求(Router.GetList([“skip”:0,“limit”:100])).responseJSON{(请求,响应,json,错误)在
//将json转换为对象
}
func getById(completionHandler:([Object1]?,NSError?)->()){
请求(Router.GetById(id)).responseJSON{(请求,响应,json,错误)在
//将json转换为对象
}
}
我认为有很多方法可以做到这一点。这里有一些想法
baseURLString
存储在APIClient
中,并将值传递给每个服务
初始值设定项BaseService
类,在该类中存储服务之间所有常见类型的信息,例如baseURLString
、附加头等APIClient
中公开baseURLString
,并将APIClient
的弱引用传递到每个服务中AppEnvironment
,该对象存储可通过全局单例或类属性访问的属性,如OAuth info、baseURLString
等还有很多方法。希望其中的一个想法能激发你的想象力。谢谢你的这些想法,但我的目标是服务不应该知道ApicClient的任何信息,如果我通过引用传递URL,singleton…我必须在每个服务-->ApicClient.URL中实例化它。如果我错了,请纠正我。答案是to您最初提出的问题是否,您无法使用会话管理器配置设置
baseURLString
。它不支持基本URL的概念。因此,您需要使用继承、全局值、依赖项注入等来确保服务
对象可以访问基本URL。最简单的解决方法是通过创建一个设置baseURL
的BaseService
来使用继承,所有其他Service
子类将自动继承它。