在调用Alamofire.request(URLRequestConvertible)时缺少参数#2的参数

时间:2015-01-23 09:02:09

标签: alamofire

尝试使用自定义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,但我得到了同样的错误。我正在查看协议定义,并认为在我的情况下它没有理由变得更简单(类),所以我改变了它。还是一样的错误。

1 个答案:

答案 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版本进行编译。希望有所帮助!