当我在 Alamofire 中使用 UserDefaults.standard.object 时,它显示“调用中的额外参数”错误
Posted
技术标签:
【中文标题】当我在 Alamofire 中使用 UserDefaults.standard.object 时,它显示“调用中的额外参数”错误【英文标题】:When i use UserDefaults.standard.object in Alamofire it shows "Extra argument in call" error 【发布时间】:2019-03-04 19:02:46 【问题描述】:当我将 Alamofire 函数与 UserDefaulfts.standard.object
之类的 CoreData 一起使用时,xcode 将引发错误 Extra Argument in call
我尝试了 *** 中的所有答案,例如 HTTPMethod
和 .JSONEncoding
,但没有发生
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
.................
【问题讨论】:
嗨。您介意选择您认为有帮助的答案吗? 【参考方案1】:按住选项键并按object(forKey
功能阅读文档提示。您将看到该函数的返回类型是可选的,因为您传递的键下不能存储任何内容,对吧?所以你的 key2
常量也是 Optional 类型。
然后,当您在字典中使用它时,headers
本身变成了"String: Optional(String)"
类型,因为其中一个值是可选的(key2)。
Alamofire 需要 headers
参数中的 [String: String]
字典类型,并且由于您的 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"
与第一个建议的结果相同
【讨论】:
【参考方案2】:这里使用的 Key 是 String 类型,在 Header 传递中,你没有在 header 中提及变量的类型
在我使用这个之前
let key2:String = UserDefaults.standard.object(forKey: "accessToken") as! String
xcode 再次乐于编码...
【讨论】:
如果您使用as! String
,那么当“accessToken”不存在时应用程序将崩溃。你可以使用:as? String ?? ""
(默认值)或guard...
或if let...
或任何你想要的。仅当您确定它的值不是 nil 时才使用 !。
你知道还有string(forKey
吗?但是它也返回一个可选的。以上是关于当我在 Alamofire 中使用 UserDefaults.standard.object 时,它显示“调用中的额外参数”错误的主要内容,如果未能解决你的问题,请参考以下文章
当我在数据库中使用 Alamofire 发送三个数组帖子时出现错误?