当我在Alamofire中使用UserDefaults.standard.object时,它显示“调用中的额外参数”错误

时间:2019-03-04 19:02:46

标签: ios swift xcode alamofire

当我将Alamofire函数与类似UserDefaulfts.standard.object的某些CoreData一起使用时,xcode会引发错误Extra Argument in call,我尝试了类似HTTPMethod.JSONEncoding的Stackoverflow中的所有Ans但不会发生

func Sync(){

    let url = "http://abcd.com/reportlist"
    let parameters = ["sort_by":"month_year",
                      "start":"1",
                      "end":"10"]


    let key2 = UserDefaults.standard.object(forKey: "accessToken") 

    let headers = [
        "Authorization": key2,
        "Content-Type": "application/x-www-form-urlencoded"]


    Alamofire.request(url, method: .post, parameters: parameters, headers: headers).responseJSON { response in
        if response.result.isSuccess
        {

            var dictVal = response.result.value
            let data1 = response.data
            .................

2 个答案:

答案 0 :(得分:1)

按住选项键,然后按object(forKey功能以阅读文档提示。您会看到该函数的返回类型是可选的,因为在您传递的键下无法存储任何内容,对吗?因此,您的key2常量也是Optional类型。

然后,当您在字典中使用它时,headers本身将变成"String: Optional(String)"类型,因为其中一个值是Optional(键2)。

Alamofire期望在[String: String]参数中使用headers字典类型,并且由于您的headers字典类型不匹配,因此会产生此错误-extra argument。像I don't know why you pass it to me I do not expect anything of type like that

就是这样

因此,您可以使用string(forKey方法,以防万一在传递的密钥下没有存储任何内容时返回空字符串,或者提供类似的默认值

let key2 = (UserDefaults.standard.object(forKey: "accessToken") as? String) ?? "defaultAccessTokenOrNothing"的结果与第一个建议相同

答案 1 :(得分:0)

此处使用的键是字符串类型,并且在标头传递中,您未提及标头中的变量类型

在我使用此

之前

let key2:String = UserDefaults.standard.object(forKey: "accessToken") as! String

xcode再次乐于编写代码...