Ich habe in diesem blöd Verhalten in Swift, wo Force-Unwrapping eine optionale nicht propagiert.Schnelle Force-Unwrapping Ausnahme nicht propagiert
Aus der Dokumentation:
zu verwenden Versuch! Der Zugriff auf einen nicht vorhandenen optionalen Wert löst einen Laufzeitfehler aus. Stellen Sie immer sicher, dass ein optionales Element vor der Verwendung einen Nicht-Nullwert enthält! um seinen Wert zu erzwingen.
zu reproduzieren:
func foo(bar:String?) throws{
print(bar!);
}
Und
try foo(nil);
Dies gilt nicht logisch oder konsistent erscheinen mir und ich zu diesem Thema alle Unterlagen nicht finden können.
Ist das von Entwurf?
Ich bin mir nicht sicher, dass das Werfen eines Fehlers mit 'throw' (was dazu führt, dass Fehler innerhalb einer solchen Funktion propagiert werden) dasselbe ist, was passiert, wenn man ein' nil' erzwingt. Ich glaube, ich habe irgendwo gelesen, dass es als 'assert()' implementiert ist. –
Das würde es erklären, aber das ist schrecklich. Vielleicht gibt es ein Argument dafür, aber in einer Sprache, die Ausnahmen unterstützt, scheint es nur inkonsistent zu sein. – Greg
@Greg: Nicolas hat Recht. Beachten Sie, dass try/catch-Handles Swift * -Fehler * (Werte, die mit 'ErrorType' übereinstimmen) ausgelöst werden. Das ist * völlig unabhängig von Laufzeitfehlern oder Ausnahmen. (Die Dokumentation erwähnt nicht einmal das Wort "Ausnahme" in Verbindung mit throw/try/catch, nur "Fehlerbehandlung".) –