Die if-Anweisung unten fängt nicht loc! .speed < 1.0. Warum?Swift IF-Anweisung Fehler?
if loc == nil || loc!.speed < 1.0, self.tripOver
{
return
}
jedoch die if-Anweisung unten arbeitet
if loc == nil || loc!.speed < 1.0 || self.tripOver
{
return
}
Die obige if-Anweisung tut Fang loc! .Speed < 1.0 und ordnungsgemäß zurückgibt.
Warum swift nicht den zweiten Teil des bedingten Ausdruck auswerten, wenn es eine ist ‚‘ einen anderen Teil der Aussage zu trennen?
Das sieht aus wie ein Bug zu mir.
Die Anweisungen sind nicht äquivalent - das Äquivalent von 'if loc == nil || loc! .speed <1.0, self.tripOver {...} '' ist if (loc == null || loc! .speed <1.0) && self.tripOver {...} ' – Hamish
es ein Fehler _is_. _Ihr_ Fehler. – matt
Gegeben das zweite Schnipsel ist in der Tat die Logik, nach der Sie suchen, eine Alternative ist z.B. Kombinieren der Bedingung von "loc" ist nicht-'nil' mit dem Prädikat über die' loc': s Mitglied 'speed':' if loc.map ({$ 0.Speed <1.0 || self.tripOver}) ?? Wahr {Rückkehr} '. Oder optional Bindung verwenden und wechseln Sie zu einem 'guard' Klausel für den frühen' return' (Umdrehen der Logik), 'Wache lassen nonOptLoc = loc, nonOptLoc.speed> = 1,! Self.tripOver else {return}'. – dfri