模糊地使用'下标'Swift 3编译错误

时间:2017-03-17 13:24:33

标签: swift subscript

目前只在真正的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)
                }
            }
        }

1 个答案:

答案 0 :(得分:0)

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

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

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