2017-05-12 7 views
1

Guten Tag.Alamofire: unerwartet gefunden Null beim Auspacken ein optionaler Wert

Ich habe eine iOS Swift-Anwendung, die mit einer bereits erstellten API kommuniziert und kommuniziert mit Alamofire. Das Problem, das ich habe, ist die API möglicherweise nulls einige Zeit zurückkehren kann, und dies verursacht das folgende Problem:

„fatale Fehler: unerwartet gefunden Null, während einen optionalen Wert auspackt“

Mein Code-Snippet, das aus dem Wörterbuch liest ist wie folgt:

if let LowRate = HotelList[i]["LowRate"] as? Decimal!{ 
    HList._LowRate = LowRate 
} 

ich habe mehrere Fragen und google Sites überprüfte aber ich brauche eine Möglichkeit, das Objekt im Wörterbuch für null zu überprüfen, bevor seine verarbeitet oder ich brauche eine Art Standardwert zu setzen.

Das Json null Beispiel ist als

HotelData = "<null>"; 
     HotelList =(
      { 
       Address1 = "124 Oceanview Road"; 
       Address2 = Oneroa; 
       BookingUrl = "<null>"; 
       City = " Auckland"; 
       Country = "New Zealand"; 
       CurrencyCode = "<null>"; 
       DateViewed = "<null>"; 
       Description = "<null>"; 
       Directions = "<null>"; 
       Distance = "<null>"; 
       GeoPoint = "<null>"; 
       HighRate = "<null>"; 
       ImageUrl = "<null>"; 
       LowRate = "<null>"; 
       MinChildAge = "<null>"; 
       Name = "The Oyster Inn"; 
       NavUrl = "<null>"; 
       PostalCode = "<null>"; 
       State = "<null>"; 
       WebsiteUrl = "<null>"; 
       distance = "<null>"; 
       hotelID = 130; 
       isActive = 1; 
       isBlocked = 0; 
       isChildrenAllowed = "<null>"; 
       isFavorite = 0; 
       isPromoNotified = 0; 
       showDouble = "<null>"; 
} 
     ); 
     RowCount = 11; 
     hasError = 0; 
    }; 

folgt ich Alamofire für meine Json bin mit und es funktioniert, es sei denn es eine Null in einem der 20 Felder zurückgekehrt ist, die möglicherweise eine Null zurückkehren konnte.

Kann mir jemand bei der Durchführung einiger Validierungsprüfungen für das Ergebnis einer Null helfen, wie oben gezeigt, während ich ein optionales Paket entpacke.

Grüße

+0

'wie? Dezimal! 'Nicht gewaltsam auspacken. Ersetzen Sie das '!' Durch eine andere Ebene von 'if let' und behandeln Sie die Möglichkeit von nil. – Moritz

+0

Guten Tag. Vielen Dank für Ihre Antwort. Können Sie mir ein Beispiel geben, wie Sie ein "!" mit einem "wenn lassen" für Null-Validierung? Grüße –

+0

Sie haben ein Beispiel in Ihrem eigenen Code. :) Das wird auch schon überall erklärt, suche nach "optionals" und "optional binding" (was der Name des 'if let' Systems ist). – Moritz

Antwort

0

Dies ist, wie Sie dies tun können. (Aktualisiert)

if let lowRate = json["LowRate"], !(lowRate is NSNull){ 
    print(lowRate) 
}else{ 
    print("null") 
} 
-1

Ihr json hat Array von nur ein Objekt. Was ist der Wert von ich? Wenn es größer als 0 ist, wird es abstürzen.

+0

Es gibt 11 dieser Objekte, die ich gerade gezeigt –

+0

versuchen HotelList [i] ["LowRate"] als? Dezimal? –

+0

Hallo, ich werde das jetzt versuchen und zu dir zurückkommen –

0

Guten Tag

Danke an alle Beiträge zu helfen, meine Antwort zu finden. Was am Ende funktionierte, war etwas Ähnliches wie oben. Ich musste ein NSNumber-Objekt verwenden und es später auf eine Dezimalstelle umwandeln, siehe Code unten.

if let lowRate = HotelList[i]["LowRate"] as? NSNumber{ 

HList._LowRate = LowRate 

}else{ 

    print("Null") 

} 

Grüße

Verwandte Themen