2017-07-15 16 views
0

json結果から情報を取得し、特定のキー値に追加してアクセスしようとしています。 。しかし、私はエラー「型 『[文字列:任意]は、』取得しています。これはまた、私は拡張子に置かれている構造体である何の添字のメンバーを持っていないタイプ '[String:Any]'にSwiftに添字のメンバーはありません

 let json = try? JSONSerialization.jsonObject(with: data!, options: []) as! [String: Any] 
     for case let studentsInfo in json["results"] { 
      if let studentInfo = StudentResults(json: result) { 
       let name = firstName + " " + lastName 
       StudentsResults.append(name) 
      } 

struct StudentResults{ 
    let firstName: String 
    let lastName: String 
    let latitude: Double 
    let longitude: Double 
    let mapString:String 
    let mediaURL: String 
    let objectID:String 
    let uniqueKey: String 
    let updatedAt: String 
} 

convenience init?(json: [String: Any]) { 
    guard let firstName = json["firstName"] as? String, 
      let lastName = json["lastName"] as? String 
     else { 
      return nil 
    } 
    return nil 

ですこのプロジェクトのためにも、私のGitHubページあなたはそれで

https://github.com/SteveBurgos95/UdacityMapProject

答えて

0

を見てみたい場合は、問題のコード行であるように私には見える:

let json = try? JSONSerialization.jsonObject(with: data!, options: []) as! [String: Any]

あなたは力ここas! [String: Any]それをキャストしている間、try?はあなたに任意の値を与えています。

2つのオプションがあります。あなたが狂った人のこととtry!try?を変更するか、より安全なアプローチを取るので、次のようなコードをラップすることができますすることができます

do { 
    guard let json = try JSONSerialization.jsonObject(with: data!, options: []) as [String: Any] else { return } 
    … 
} catch { 
    // HANDLE ERROR 
} 
+0

私はそれをやってみました、しかし、私は条件付き結合のための「イニシャライザと言うエラーが出ます'[String:Any]'ではなく、オプションの型を持たなければなりません。 "そして、それをオプションに変更すると、Tye Anyを取得しますか?プロトコルシーケンスに従っていません。 @InfinityJames –

関連する問題