【问题标题】:Ambiguous reference to member subscript in Alamofire在 Alamofire 中对成员下标的模糊引用
【发布时间】:2016-09-16 12:33:27
【问题描述】:
Alamofire.request(videosUrl!).responseJSON { response in
        if response.result.value != nil {

            let json = response.data

            do {

                let readableJSON = try JSONSerialization.jsonObject(with: json!, options: .mutableContainers) as? JSONStandard

                if let items = readableJSON {

                    for i in 0..<items.count {

                        let item = items[i] <<< ERROR HERE

                        ...REST OF CODE HERE
                    }
                }    

             } catch {
                 print(error)
             }
         }
     }

我还有一个类型别名集:

typealias JSONStandard = [String:AnyObject]

我的问题是为什么会出现“对成员下标的模糊引用”错误?我要做的就是访问数组的正确部分。

【问题讨论】:

  • 我正在按照here 中的一个例子来适应我的需要,它对他有用吗?几乎完整的代码见 21:27。

标签: alamofire swift3


【解决方案1】:

错误发生,因为Dictionary(这是你的JSONStandard)的下标方法需要:

1) String 作为一个关键参数,但是你传递了i,它具有Int 类型。根据示例,您的代码基于您可能应该替换

if let items = readableJSON {
...
}

if let tracks = readableJSON["tracks"] as? JSONStandard {
      if let items = tracks["items"] as? [JSONStandard] {
          ...
      }
}

在这种情况下,items 变为 Array,它在下标方法中使用 Int 索引。

2) 或者因为Dictionary 也是一个索引类型为DictionaryIndex&lt;Key, Value&gt; 下标的集合也可以期待DictionaryIndex&lt;String, AnyObject&gt;。在您的情况下,您可以替换

for i in 0..<items.count {

for i in items.indices {

甚至与

for (_, item) in items {

您选择的解决方案取决于您的 JSON

的结构

【讨论】:

    猜你喜欢
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    相关资源
    最近更新 更多