2016-08-25 10 views
7

bu hatayı alıyorum: "Tür 'Herhangi' hayır simge üyesi vardır" kod bloğunu çalıştırmak çalışırken: Ben arama edilmiştirTipi 'Herhangi' hayır alt simge üyesi vardır (Firebase)

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

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

bir cevap için ve bu sorunu FireBase ile çözen birini bulamadı. Bu hatayı nasıl çözebilirim?

+2

sizin anlık snapshot.value' bir sözlük dönmez 'demektir ilkel değere sahip gibi görünüyor. Ne '' '' '(' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '•' '' • '' '' '' '' • '' '' '' '• '' '' 'kontrol eden konumun ne olduğunu kontrol edin. –

+0

yazdırma nedir (snapshot.value! .dynamicType) 'yazdırır? – vacawama

+0

@vacawama bu bir NSDictionary –

cevap

17

snapshot.value, Any? türüne sahiptir, bu nedenle, altyazıya abone olabilmeniz için önce onu temel türüne göndermeniz gerekir.

content = (snapshot.value as? NSDictionary)?["content"] as? String ?? "" 
: Bir tek astar olarak bunu yapabilir,

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

Veya: snapshot.value!.dynamicTypeNSDictionary olduğundan, türünü belirlemek için isteğe bağlı döküm as? NSDictionary kullanmak ve sonra sözlükte değerini erişebilir

+0

olduğunu çok teşekkürler! Mükemmel çalışır –

+0

Çocuk düğümlerinin değerlerini nasıl alabilirim? –

2

Ayrıca, çocuk düğümlerinin değerlerine erişmenizi sağlayan bir kod parçam var. Bu size yardımcı olur umarım:

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

      } 

     } 

Saygılarımızla, Nazar Medeiros