Swift 3/Alamofire 4 迁移,必须为 [String: AnyObject] 使所有元素“作为 AnyObject”
Posted
技术标签:
【中文标题】Swift 3/Alamofire 4 迁移,必须为 [String: AnyObject] 使所有元素“作为 AnyObject”【英文标题】:Swift3/Alamofire4 migration, having to make all elements 'as AnyObject' for [String: AnyObject] 【发布时间】:2017-01-16 17:54:36 【问题描述】:我有之前 Swift/Alamofire 版本中运行良好的旧代码
parameters = ["name":name, "description":description, "location":location, "start_time":start_time , "end_time":end_time/* ..etc */] as [String: AnyObject]
Alamofire.request(.PUT, url, parameters: parameters, encoding: .json, headers: ["Authorization": auth_token, AppVersionKey: AppVersionValue]).validate().responseJSON() response in
print("Status code of default pic call: \(response.response?.statusCode)")
我知道我现在必须切换到
Alamofire.request(url, method: .put, ... , encoding: JSONEncoding.default ...)
但是我收到了parameters
的 Xcode 错误,并且修复它只是将 as AnyObject
添加到 k,v 对中的每个值,然后导致“表达式太复杂而无法在合理的时间内解决...“ 错误。我应该如何使用新的 Swift3 和 Alamofire4 来做到这一点?甚至不确定这是 Swift 错误还是 Alamofire 迁移问题
【问题讨论】:
Alamofire parameter only accepts [String : Anyobject]?的可能重复 【参考方案1】:您分配给parameters
的文字类型为[String: Any]
,转换为[String: AnyObject]
,这就是编译器抱怨的原因。
如果您在作业结束时删除演员表并将parameters
的类型更新为[String: Any]
,它应该可以工作。
这是由于 Swift 3 的变化,它基本上用 Any
取代了许多以前使用的 AnyObject
,因此结构和枚举也将被接受。
【讨论】:
以上是关于Swift 3/Alamofire 4 迁移,必须为 [String: AnyObject] 使所有元素“作为 AnyObject”的主要内容,如果未能解决你的问题,请参考以下文章
Swift 3.0 Alamofire 4.0 - Domain=NSURLErrorDomain Code=-999 “取消”
如何使用参数 swift 3.0 Alamofire 4.0 调用邮政服务?