【问题标题】:Ambiguous use of 'subscript' Swift 3 compile error模糊使用“下标”Swift 3 编译错误
【发布时间】:2017-08-09 01:59:06
【问题描述】:

目前仅在真正的 iPhone 上构建时出现错误“不明确地使用 '下标'”。使用模拟器时没有任何问题。这是我的代码:

    let url=URL(string:myUrl)
    do {
        let allContactsData = try Data(contentsOf: url!)
        let allContacts = try JSONSerialization.jsonObject(with: allContactsData, options: JSONSerialization.ReadingOptions.allowFragments) as! [String : AnyObject]
        if let arrJSON = allContacts["data"] {
            for index in 0...arrJSON.count-1 {

                let aObject = arrJSON[index] as! [String : AnyObject]
                if(ChooseSubject.mineFagKoder.contains(aObject["subject"] as! String)){
                    ids.append(aObject["id"] as! String)
                    names.append(aObject["name"] as! String)
                    subjects.append(aObject["subject"] as! String)
                    descriptions.append(aObject["description"] as! String)
                    deadlines.append(aObject["deadline"] as! String)
                }
            }
        }

【问题讨论】:

  • 我认为问题可能来自 [String : AnyObject]。我不是 Swift 专家,但通过阅读我得到了一些关于类似场景的信息。看看stackoverflow.com/questions/33642059/… 甚至stackoverflow.com/questions/33592699/…
  • 究竟是哪一行?let aObject = arrJSON[index] as! [String : AnyObject]我猜是因为你没有告诉编译器arrJSON是一个数组,所以你不能做arrJSON[index]
  • 这一行:让aObject = arrJSON[index] as! [字符串:任何对象]。我怎么知道 arrJSON 是一个数组?

标签: swift subscript


【解决方案1】:

首先,Swift 3 中的 JSON 字典类型是 [String:Any]

ambiguous use 的原因是编译器不知道allContacts["data"] 的类型。这显然是一个数组,但你需要告诉编译器。并且请不要在 Swift 中使用基于 for 循环的丑陋 C 风格索引。如果您需要 indexobject 在重复循环中使用 enumerated()

if let arrJSON = allContacts["data"] as? [[String : Any]] {
   for aObject in arrJSON {
       if ChooseSubject.mineFagKoder.contains(aObject["subject"] as! String) { ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    相关资源
    最近更新 更多