2016-08-25 20 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 = "" 
    } 
} 

मैं खोज की है एक उत्तर के लिए और यह नहीं मिला कि इस समस्या को फायरबेस के साथ हल किया गया है। मैं इस त्रुटि को कैसे हल करूं?

+2

ऐसा लगता है आपके स्नैपशॉट की तरह एक आदिम मूल्य है, जो 'मतलब है snapshot.value' एक शब्दकोश वापस नहीं करता है। जांचें कि 'कुंजी' क्या है (अगर मैं' सामग्री 'है तो मुझे आश्चर्य नहीं होगा) और जेएसओएन उस स्थान पर है जहां आप देख रहे हैं। –

+0

'प्रिंट (स्नैपशॉट.वैल्यू!। डायनामिक टाइप) 'प्रिंट क्या करता है? – vacawama

+0

@ वाकावामा यह प्रिंट करता है कि यह एक NSDictionary –

उत्तर

17

snapshot.value में Any? टाइप है, इसलिए आपको इसे सब्सक्राइब करने से पहले अंतर्निहित प्रकार में डालना होगा। चूंकि snapshot.value!.dynamicTypeNSDictionary है, प्रकार की स्थापना के लिए एक वैकल्पिक डाली as? NSDictionary उपयोग करते हैं, और फिर आप शब्दकोश में मूल्य का उपयोग कर सकते हैं:

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

या, आप एक एक लाइनर के रूप में यह कर सकते हैं:

content = (snapshot.value as? NSDictionary)?["content"] as? String ?? "" 
+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) 
       } 

      } 

     } 

सादर, नज़र Medeiros

संबंधित मुद्दे