尝试使用自定义URLRequestConvertible的推荐方法传递身份验证标头。
所以这是符合协议的URLRequestConvertible对象:
class SecureJSONRouter : URLRequestConvertible {
var type: String
var token: String
var parameters: [String: AnyObject]
init(typevar: String, tokenvar: String, parametersvar: [String: AnyObject]) {
type = typevar
token = tokenvar
parameters = parametersvar
}
var URLRequest: NSURLRequest {
let URL = NSURL(string: da_url)!
let URLRequesting = NSMutableURLRequest(URL: URL.URLByAppendingPathComponent(type))
let encoding = Alamofire.ParameterEncoding.JSON
URLRequesting.setValue(token, forHTTPHeaderField: "Authorization")
return encoding.encode(URLRequesting, parameters: parameters).0
}
}
它基本上是一个存储一些东西的地方,比如一些URL和一个令牌,以及一种创建带有完整URL,JSON参数和头部字段以进行授权的NSURLRequest的方法。
当我尝试这样称呼它时:
let myUrlRequest: URLRequestConvertible = SecureJSONRouter(typevar: "locations", tokenvar: token!, parametersvar: parameters)
Alamofire.request(myUrlRequest).response{ (req, resp, data, error) in
if (error != nil) {
println(req)
println(resp)
} else {
println("saved \(data)")
}
}
它不会编译,给我一个"在参数#2中#"缺少参数#34;错误,在请求行。
有什么想法吗?
PS:我确实把我的SecureJSONRouter作为推荐的Enum而不是Class,但我得到了同样的错误。我正在查看协议定义,并认为在我的情况下它没有理由变得更简单(类),所以我改变了它。还是一样的错误。
答案 0 :(得分:0)
我认为这里有一些可能的罪魁祸首。首先,您确定要拨打Alamofire
而不是AlamoFire
吗?我以前见过人们犯了这个错误。
至于您发布的示例代码,由于几个不同的原因,它没有编译。我无法重现您所看到的完全相同的编译器错误,但这是您编辑的原始帖子的略微修改版本。
class SecureJSONRouter : URLRequestConvertible {
var type: String
var token: String
var parameters: [String: AnyObject]
init(typevar: String, tokenvar: String, parametersvar: [String: AnyObject]) {
type = typevar
token = tokenvar
parameters = parametersvar
}
var URLRequest: NSURLRequest {
let URL = NSURL(string: "http://httpbin.org")!
let URLRequesting = NSMutableURLRequest(URL: URL.URLByAppendingPathComponent(type))
let encoding = Alamofire.ParameterEncoding.JSON
URLRequesting.setValue(token, forHTTPHeaderField: "Authorization")
return encoding.encode(URLRequesting, parameters: parameters).0
}
}
然后,这是调用SecureJSONRouter
。
let token: String? = "my_fancy_token"
let parameters: [String: AnyObject] = ["sample_parameter": "sample_parameter_value"]
let myUrlRequest: URLRequestConvertible = SecureJSONRouter(typevar: "locations", tokenvar: token!, parametersvar: parameters)
Alamofire.request(myUrlRequest).response{ (req, resp, data, error) in
if (error != nil) {
println(req)
println(resp)
} else {
println("saved \(data)")
}
}
正在使用Xcode 6.1.1针对Alamofire 1.1.3版本进行编译。希望有所帮助!