我在库项目中使用Alamofire来处理我的请求。
我尝试使用enum Router: URLRequestConvertible
来处理路线和查询,但我有一些参数应该只设置一次,而某些参数应该有默认值而且我没有#39}知道处理它们。
这是我到目前为止所做的:
ResultFromat
枚举/// Available result formats
enum ResultFormat: String {
case XML = "xml"
case JSON = "json"
}
Router
枚举这里有一个固定的参数,应该在创建时设置(apiId
),一个具有默认值(resFormat
),但不要使用{init
进行设置。 1}}方法工作。
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
}
}
我已经检查了初始化的不同可能性,但它们似乎都没有工作。任何帮助都会被贬低。
答案 0 :(得分:0)
好的,所以我发现你的代码存在三个问题。
首先,你的枚举没有任何案例。不确定它是否是严格要求的,但似乎在Swift枚举中需要有一个案例。你可以使用单case Default
。
第二件事是你没有在初始化者处设置self
。枚举初始化者,因为枚举由个案组成,需要指定self
属于哪个案例。你可以写self = .Default
。
第三件事是,如果要定义非可选属性,则不能使其无价值。提供apiId
解析的初始值。
完成这些更改后,您的代码如下所示:
enum Router {
case Default
static let API_BASE = "http://sbslocal/api2/"
static let apiId : String = ""
static var resFormat = ResultFormat.JSON
init(apiID: String) {
Router.apiId = apiID
self = Router.Default
}
}
这可以用于:
let router = Router(apiID: "someID")
如果这是您正在努力的API,那就来了。