2017-03-17 5 views
-1

現実のiPhoneにしかビルドしていないときに、「サブスクリプト」をあいまいに使用しています。シミュレータを使用しても問題はありません。ここに私のコードは次のとおりです。'subscript'のあいまいな使用Swift 3のコンパイルエラー

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) 
       } 
      } 
     } 
+0

問題は[String:AnyObject]から発生している可能性があります。私は迅速な専門家ではありませんが、読書で私は同様のシナリオに関するいくつかの情報を得ました。これをチェックしてくださいhttp://stackoverflow.com/questions/33642059/ambiguous-use-of-subscript-in-swiftまたはさらにはhttp://stackoverflow.com/questions/33592699/ambiguous-use-of-subscript-xcode- 7-1 – Balanced

+0

どの行が正確に表示されますか? 'aObject = arrJSON [index]を! [String:AnyObject] '私は、あなたが' arrJSON'が配列であることをコンパイラに知らせなかったので、 'arrJSON [index]'を実行できないと思います。 – Larme

+0

この行: let aObject = arrJSON [index]を! [文字列:AnyObject]。 arrJSONが配列であることをどのように確認できますか? –

答えて

0

スウィフト3内のすべてのJSON辞書型の第1は[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) { ... 
関連する問題