Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 使用manager会话配置设置默认baseURLString_Swift_Alamofire - Fatal编程技术网

Swift 使用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

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

斯威夫特酒店

类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
    子类将自动继承它。