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 调用邮政服务?

IOS Swift 3 Alamofire 4.0.0

Swift 3 / Alamofire 4:在 TableView 上使用 ID 获取数据

Swift 3 Alamofire JSON 响应

POST 请求 Swift 3.0 Alamofire