gpt4 book ai didi

swift - 使用管理器 session 配置设置默认的 baseURLString

转载 作者:行者123 更新时间:2023-11-28 05:27:48 29 4
gpt4 key购买 nike

我正在使用带有 Alamofire 库的 swift 开发一个 IOS 应用程序。下面描述了我的网络模型的两个文件,第一个是具有 Alamofire 管理器 session 配置的 ApiClient 类和 2 个服务实例,在我的问题中我只描述了一个,Service1 结构,在这个结构中我是使用 Alamofire 路由器请求 REST API,我想知道,如何使用管理器 session 配置设置默认的 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()
}


}

Service1.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

}


}

最佳答案

我认为有很多方法可以做到这一点。这里有一些想法......

  1. baseURLString 存储在 APIClient 中,并将该值传递给每个 Service 初始化器
  2. 创建一个 BaseService 类,您可以在其中存储服务之间所有常见类型的信息,例如 baseURLString、附加 header 等。
  3. APIClient 中公开 baseURLString 并将 APIClient 的弱引用传递到每个服务中。
  4. 创建一个单独的对象,例如存储 OAuth 信息、baseURLString 等属性的 AppEnvironment,这些属性可以通过全局单例或类属性访问。

还有很多方法。希望其中一个想法能激发您的想象力。

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

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com