2016-04-27 10 views
-1

Die Fehlermeldung besagt, dass Downcast von 'String ?!' 'String' entpackt nur Optionale; Wolltest du '!!' benutzen? Ich habe String zu NSArray ersetzt, aber es hat nicht funktioniert. Kann jemand das beheben?Ich habe einen Fehler bekommen, wenn ich meine Codes von Xcode7.2 nach Xcode7.3 konvertiert habe

returnFirebaseUrl(self.myRootRef).queryLimitedToLast(1000).observeEventType(FEventType.ChildAdded, withBlock: { (snapshot) in 

      self.showProgressHUD() 

      // 3 codes below are the reason why I got error for. 
      let text = snapshot.value["text"] as? String 
      let sender = snapshot.value["from"] as? String 
      let name = snapshot.value["name"] as? String 


      var isOutGoing:Bool 

      if sender == GetUserId(){ 
       isOutGoing = true 
      }else{ 
       isOutGoing = false 
      } 

      let mediaItem = self.createPhotoItem(Const.S3_URL + text!, isOutgoing: isOutGoing) 

      var message:JSQMessage 
      if text!.hasSuffix(".jpg"){ 
       message = JSQMessage(senderId: sender, displayName: name, media: mediaItem) 

      }else{ 
       message = JSQMessage(senderId: sender, displayName: name, text: text) 
      } 
      self.messages?.append(message) 

Antwort

0

Sieht so aus, als müssten Sie auch snapshot.value auspacken.

So etwas wie Thism wahrscheinlich:

guard let value = snapshot.value, 
    text = value["text"] as? String, 
    sender = value["from"] as? String, 
    name = value["name"] as? String else { 
     fatalError("Oops, one of the values was nil") 
} 

// here you can use unwrapped text, sender and name 
+0

Ich habe versucht, aber hat nicht funktioniert. Kennst du irgendwelche Lösungen dafür? – hujihuji

+0

Ich weiß nicht, was "nicht funktioniert" bedeutet, ich habe keine Weissagungskräfte ... Vielleicht könntest du uns sagen * was ist die Fehlermeldung? * Was passiert statt was passiert? Hast du auch etwas ausprobiert? Was ist der Typ von "Schnappschuss"? Ist es optional oder nicht? Etc. – Moritz

0

Sie müssen snapshot.value um auszupacken der Lage sein, es als ein Wörterbuch zu verwenden. Als eine Anleitung ist nicht sicher, 'unwrap' mit '!' weil es zu Abstürzen führen könnte.

Was Sie versuchen könnte, ist so etwas wie die folgenden:

if let valueDictionary = snapshot.value as? Dictionary<String, AnyObject> { 
     let text = snapshot.value["text"] as? String //this will still be optional and might need to carefully unwrap 
     etc etc 
    } 
+0

Ich habe versucht, aber hat nicht funktioniert. Kennst du irgendwelche Lösungen dafür? – hujihuji

+0

Was ist der Fehler, den Sie beim Testen der obigen Lösung bekommen? –

Verwandte Themen