/ / Swift - Guard-let vs if-let [geschlossen] - ios, swift, xcode

Swift - Guard-let vs if-let [geschlossen] - ios, swift, xcode

Ich habe einige Probleme, die den folgenden Code zum Laufen bringen. Haben Sie irgendwelche Ideen, warum es nicht funktioniert?

guard let parsedData = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments),
let parsedDict = parsedData as? [String:Any],
let stop = parsedDict["Stop"] as? [String:Any],
let name = stop["Name"] as? String,
let latitude = stop["Latitude"] as? String,
let longitude = stop["Longitude"] as? String else
{
print("Something Went Wrong")
return
}

nameArray.append(name)
latArray.append(latitude)
longArray.append(longitude)

Der folgende Code funktioniert jedoch:

if let parsedData = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String:Any]
{
if let stop = parsedData?["Stop"] as? [String:Any]
{
if let latitude = stop["Latitude"] as? String, let longitude = stop["Longitude"] as? String, let name = stop["Name"] as? String
{
nameArray.append(name)
latArray.append(latitude)
longArray.append(longitude)
}
}
}

BEARBEITEN

Nach der Überprüfung des Codes scheint das Problem auf diese Zeile zurückzuführen zu sein:

guard let stop = parsedDict["Stop"] as? [String:Any] else
{
print("Something went wrong")
return
}

Beim Ausführen erhalte ich in der Konsole "Etwas ist schiefgegangen", jedoch beim Ausführen

if let stop = parsedData?["Stop"] as? [String:Any]
{
print(stop)
}

Ich bekomme einen gültigen Stop von Stop.

Antworten:

0 für die Antwort № 1

Lass deine Wache auf einem Spielplatz laufenist für mich erfolgreich. Ich würde empfehlen, Ihre Wache in mehrere logische Abschnitte aufzuteilen. Um Ihnen beispielsweise dabei zu helfen, Ihren Fehler aufzuspüren, können Sie ihn folgendermaßen ändern:

//Note: You should not force unwrap data here

guard let parsedData = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments) else{
print("Serialization error"); return
}

guard
let parsedDict = parsedData as? [String:Any],
let stop = parsedDict["Stop"] as? [String:Any] else {

print("Error casting to dictionary"); return
}

guard
let name = stop["Name"] as? String,
let latitude = stop["Latitude"] as? String,
let longitude = stop["Longitude"] as? String else {

print("Error casting dictionary values"); return
}

//Everything is ok here