2016-08-25 9 views
7

を持っていない:「タイプ 『どれが』は添字のメンバーを持っていない」のコードブロックを実行しようとすると:タイプ「どれが」私はこのエラーを取得しています何の添字メンバー(firebase)

init(snapshot: FIRDataSnapshot) { 
    key = snapshot.key 
    itemRef = snapshot.ref 

    if let postContent = snapshot.value!["content"] as? String { // error 
     content = postContent 
    } else { 
     content = "" 
    } 
} 

私が探してきましたFireBaseでこの問題を解決したものは見つかりませんでした。どうすればこのエラーを解決できますか?

+2

あなたのスナップショットは 'snapshot.value'辞書を返さないことを意味プリミティブな値を、持っているように見えます。 'key'が何であるか(' content'であれば驚かないでしょう)とJSONがあなたが観測している場所に何があるのか​​を確認してください。 –

+0

'print(snapshot.value!.dynamicType)'とは何ですか? – vacawama

+0

@vacawama NSDictionary –

答えて

17

snapshot.valueのタイプはAny?なので、それを下位型にする前に基底型にキャストする必要があります。

content = (snapshot.value as? NSDictionary)?["content"] as? String ?? "" 
:あなたはワンライナーとしてそれを行うことができ、

if let dict = snapshot.value as? NSDictionary, postContent = dict["content"] as? String { 
    content = postContent 
} else { 
    content = "" 
} 

または:snapshot.value!.dynamicTypeNSDictionaryあるので、種類を確立するために、オプションのキャストas? NSDictionaryを使用して、あなたは辞書に値にアクセスすることができます

+0

ありがとうございます! –

+0

子ノードの値はどのようにして取得できますか? –

2

私は子ノードの値にアクセスできるコードピースも持っています。私はこれがあなたの役に立てば幸い:

if let snapDict = snapShot.value as? [String:AnyObject] { 

      for child in snapDict{ 

       let shotKey = snapShot.children.nextObject() as! FIRDataSnapshot 

       if let name = child.value as? [String:AnyObject]{ 

        var _name = name["locationName"] 
        print(_name) 
       } 

      } 

     } 

敬具、 ナザールメデイロス

関連する問題