作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用带有 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
}
}
最佳答案
我认为有很多方法可以做到这一点。这里有一些想法......
baseURLString
存储在 APIClient
中,并将该值传递给每个 Service
初始化器BaseService
类,您可以在其中存储服务之间所有常见类型的信息,例如 baseURLString
、附加 header 等。APIClient
中公开 baseURLString
并将 APIClient
的弱引用传递到每个服务中。baseURLString
等属性的 AppEnvironment
,这些属性可以通过全局单例或类属性访问。 还有很多方法。希望其中一个想法能激发您的想象力。
关于swift - 使用管理器 session 配置设置默认的 baseURLString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30417040/
我正在使用带有 Alamofire 库的 swift 开发一个 IOS 应用程序。下面描述了我的网络模型的两个文件,第一个是具有 Alamofire 管理器 session 配置的 ApiClient
我是一名优秀的程序员,十分优秀!