JSONSerialization.data(withJSONObject:options:)
(aka dataWithJSONObject
in Swift 2) wird als throws
deklariert. Das Übergeben ungültiger Objekte verursacht jedoch einen Absturz und keinen abfangbaren Fehler:
Warum wird diese Methode dann als "Würfe" deklariert? Unter welchen Umständen wirft es eine Ausnahme?
Wenn Sie nicht wissen, wodurch ein Fehler ausgelöst wird, ist es schwierig zu wissen, wie mit dem Fehler verfahren wird, und es ist nicht möglich, Tests zu schreiben, die diese Behandlung überprüfen.
Es stellt sich heraus, dass es die gleiche Situation ist wie diese Frage : Sie können eine Swift-Zeichenfolge erstellen, die einen ungültigen Unicode (was ?!) enthält und eine Ausnahme verursacht.
%Vor%Warum stürzt das Beispielcode in der ursprünglichen Frage ab, anstatt einen Fehler zu erzeugen?
Auf einen Fehlerbericht antwortend, informierte Apple mich, dass Sie JSONSerialization.isValidJSONObject(_:)
vor data(withJSONObject:)
aufrufen sollten, wenn Sie nicht sicher sind, dass das Objekt codierbar ist. Wenn Sie dies nicht tun, handelt es sich um einen Missbrauch der API Warum haben sie beschlossen, dass es abstürzen sollte, anstatt etwas abfangbar zu werfen?