私のコードでは、SWXMLHashライブラリを使用していくつかのXMLをデシリアライズしています。その.value()
メソッドは、任意のカスタムデシリアライズ関数と同様に、宣言にthrows
というキーワードを持っています。Swift:エラーがtry文を無視します
私は次のコード行があります。ライブラリはUInt8
ためのデシリアライザが含まれていませんので
let myValue : UInt8 = try? xml["Root"]["ValueNode"].value()
を、私は私自身を定義した:ときノード
extension UInt8: XMLElementDeserializable {
public static func deserialize(_ element: XMLElement) throws -> UInt8 {
return UInt8(element.text)!
}
}
これは動作します値があります。ノードが存在しないかnilでないときただし、エラーは次の行で発生します
return UInt8(element.text)! // Fatal error: Unexpectedly found nil while unwrapping an Optional value
これは明らかに、起こることになっています。なぜ私はこのエラーが私のtry?
ステートメントでキャッチされず、そのエラーをスローする代わりにnil
を返すのか理解できません。
誰でも手助けできますか?
'throws'と' try'を使って致命的なエラーに対処することはできませんが、それは致命的です。オプションを扱うためにSwiftに組み込まれた適切な方法があります。 – rmaddy
これはかなり前に数回適用されています:https://stackoverflow.com/a/37222884/2976878、https://stackoverflow.com/a/38738365/2976878、https:// stackoverflow。com/q/46866311/2976878、https://stackoverflow.com/q/31335023/2976878&https://stackoverflow.com/q/43009744/2976878を参照してください。 – Hamish