在我的代码中,我使用SWXMLHash库反序列化一些 XML。它的.value()
方法throws
在其声明中具有关键字,任何自定义反序列化函数也是如此。
我有以下代码行:
let myValue : UInt8 = try? xml["Root"]["ValueNode"].value()
由于该库不包含反序列化器UInt8
,因此我定义了自己的:
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
而不是抛出那个错误。
任何人都可以帮忙吗?