3

天気アプリでjsonを解析しようとしていますが、乗り越えられない障害にぶつかりました。

次のコードで、「型 'int' はプロトコル 'StringLiteralConvertible' に準拠していません」というエラーが表示されます。jsonResult["main"] をキャストしようとしましたが、代わりに「postfix のオペランドにはオプションの型が必要です。型は AnyObject です」というエラーが表示されます。何らかの方法で配列をダウンキャストする必要がありますか?もしそうなら、どうすればよいですか? 私はこれを非常に検索しましたが、他の投稿で助けを見つけることができませんでした. コードは次のとおりです。

func updateWeatherInfo(latitude: CLLocationDegrees, longitude: CLLocationDegrees) {
    Alamofire.request(.GET, AlongRequest)
        .responseJSON { (_, _, JSON, error) in
            println(JSON)
            self.updateUISuccess(JSON as NSArray!)
    }
}

func updateUISuccess(jsonResult: NSArray) {
    self.loading.text = nil
    self.loadingIndicator.hidden = true
    self.loadingIndicator.stopAnimating()

    if let tempResult = ((jsonResult["main"] as NSArray)["temp"] as? Double)
4

1 に答える 1

0

解析しようとしている JSON を提供すると、決定的な答えを出すのが簡単になりますが、表示されるエラー メッセージは明確です。

NSArrayこのエラーは、次の 1 行で 2 回、文字列添え字を使用してインスタンスとして宣言したものにアクセスしようとしているために発生します。

if let tempResult = ((jsonResult["main"] as NSArray)["temp"] as? Double)

jsonResultがパラメーターとして宣言されており、で添字を付ける前に にNSArrayキャストjsonResult["main"]しています。ここでの問題は、(および組み込みの Swift 配列) が整数ベースの添え字のみを使用することです。エラーは、Swift コンパイラが を期待している場所で、文字列リテラルを指定したことを示しています。NSArray["temp"]NSArrayInt

これを修正するには、2 つの方向のいずれかに進む必要があります。アクセスしようとしている構造に実際にこれらの文字列キーがある場合は、どちらの場合もNSDictionary代わりに使用する必要があります。NSArrayそうでない場合、およびそれが整数インデックス配列である場合は、整数を使用する必要があります。

于 2014-10-12T01:30:51.610 に答える