【问题标题】:How to use Alamofire with an array in a Json dictionary?如何将 Alamofire 与 Json 字典中的数组一起使用?
【发布时间】:2017-01-17 18:37:10
【问题描述】:

要使用 Alamofire 执行 POST 请求,我想创建一个 Json 字典,其中包含一个数组(具有 AnyObject 类型的元素)作为字典值。

但是,当我将字典定义为 [String: AnyObject] 并尝试保存一个数组时,它会生成一个 SwiftDeferredNSArray

var fields = [String: AnyObject]()
fields["key1"] = [1,2,3] // But this could also be an array of type Array<AnyObject>
fields["key2"] = "Foo"
print(fields) 

输出:"["key1": &lt;_TtCs21_SwiftDeferredNSArray 0x7fdfe9f0c2d0&gt;(\n1,\n2,\n3\n)\n, "key2": Foo]\n"

当字典值被定义为Any 类型时,输出就是我所期望的:

var fields = [String: Any]()
fields["key1"] = [1,2,3]
fields["key2"] = "Foo"
print(fields) 

输出:"["key1": [1, 2, 3], "key2": "Foo"]\n"

不幸的是,Alamofire 似乎不接受 Any 类型的字典值:

Cannot convert value of type '[String : Any]?' to expected argument type '[String : AnyObject]?'

我应该如何使用带有 Swift 数组的 POST 请求的 Alamofire?

【问题讨论】:

  • 尝试像这样声明字段字典var fields = [String: [Int]]()
  • 是的,但我想在接受任何类型(包括数组)的通用方法中使用它。所以,无法提前定义类型……
  • 您在传递以前的字典时是否遇到任何错误?
  • 没有理由不这样做,但在我的情况下,数组将是Array&lt;AnyObject&gt; 类型,并且由于字典中有许多不同的值类型,最好不要向下转换。

标签: ios json swift dictionary alamofire


【解决方案1】:

虽然我不知道 SwiftDeferredNSArray 输出是否是 Swift 中的错误,但在 Swift 3 中,字典值必须默认为 Any

由于Alamofire的Swift 3版本也更新了这个,SwiftDeferredNSArray不再出现,问题解决了。

【讨论】:

    【解决方案2】:

    我在 Swift 2.2 中也遇到了同样的问题

    我尝试将 [String: AnyObject] 类型的字典转换为 [NSObject: AnyObject] 的字典,然后在将值传递给 Alamofire 时将字典转换回 [String: AnyObject]。这对我有用。试试这个解决方案。

    编辑:

    要回答您的问题,请尝试

    var fields = [NSObject: AnyObject]()

    【讨论】:

      猜你喜欢
      • 2017-04-01
      • 2018-05-12
      • 1970-01-01
      • 2018-07-22
      • 2017-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      相关资源
      最近更新 更多