我正在使用Alamofire来处理我对图书馆项目的请求。
我正在尝试使用 anenum Router: URLRequestConvertible
来处理路由和查询,但我有一些参数应该只设置一次,有些应该有默认值,我不知道如何处理它们。
示例代码
这是我到目前为止所拥有的:
我的ResultFromat
枚举
/// Available result formats
enum ResultFormat: String {
case XML = "xml"
case JSON = "json"
}
我的Router
枚举
这里有一个参数是固定的,应该在创建时设置 ( apiId
) 和一个具有默认值 ( resFormat
) 但不设法使init
方法工作的参数。
enum Router: URLRequestConvertible {
static let API_BASE = "http://sbslocal/api2/"
/// API ID to use in the API calls
static let apiId : String
/// Format to receive the response
static var resFormat = ResultFormat.JSON
// MARK: - Enum initialzer
init(apiID: String) {
Router.apiId = apiID
}
case Search(query: String)
case ViewDetail(id: Int)
// ... the rest of the cases ...
// MARK: URLRequestConvertible
var URLRequest: NSURLRequest {
let (path: String, parameters: [String: AnyObject]?) = {
/// Set the basic URL paameters
var params = ["apiID": Router.API_ID, "format": Router.RESULT_FORMAT.rawValue]
switch self {
case .Search(let query):
// Add the specific parameters for this case (i.e. query)
params["query"] = query
return ("/search", params)
// ... the rest fo the cases
}
}()
let URL = NSURL(string: Router.API_BASE)!
let URLRequest = NSURLRequest(URL: URL.URLByAppendingPathComponent(path))
let encoding = Alamofire.ParameterEncoding.URL
return encoding.encode(URLRequest, parameters: parameters).0
}
}
我已经检查了初始化的不同可能性,但它们似乎都不起作用。任何帮助都将不胜感激。