2016-08-25 1 views
7

ich diese Störung erhalte: „Typ‚Jeder‘hat keine Index-Mitglieder“ bei dem Versuch, diesen Block von Code auszuführen:Typ ‚Alle‘ hat keine Index Mitglieder (Feuerbasis)

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

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

Ich habe gesucht für eine Antwort und konnte keine finden, die dieses Problem mit FireBase löste. Wie würde ich diesen Fehler beheben?

+2

Es sieht aus wie Ihr Schnappschuss einen primitiven Wert hat, was bedeutet, 'snapshot.value' kein Wörterbuch zurückgibt. Überprüfe, was "key" ist (ich wäre nicht überrascht, wenn das "content" ist) und was der JSON an dem Ort ist, den du beobachtest. –

+0

Was drückt 'print (snapshot.value! .dynamicType)'? – vacawama

+0

@vacawama druckt, dass es ein NSDictionary ist –

Antwort

17

snapshot.value hat den Typ Any?, also müssen Sie es auf den zugrunde liegenden Typ umwandeln, bevor Sie es subskribieren können. Da snapshot.value!.dynamicTypeNSDictionary ist, verwenden Sie einen optionalen Guss as? NSDictionary den Typ zu schaffen, und dann können Sie den Wert im Wörterbuch zugreifen:

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

Oder Sie es als Einzeiler tun können:

content = (snapshot.value as? NSDictionary)?["content"] as? String ?? "" 
+0

vielen Dank! funktioniert einwandfrei –

+0

Wie bekomme ich die Werte der Kindknoten? –

2

Ich habe auch ein Codepiece, mit dem Sie auf die Werte der Kindknoten zugreifen können. Ich hoffe, das hilft Ihnen:

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

      } 

     } 

Mit freundlichen Grüßen, Nazar Medeiros

Verwandte Themen