제 코드에서 SWXMLHash 라이브러리를 사용하여 일부 XML을 deserialize하고 있습니다. 해당 .value()
메서드는 사용자 지정 deserialise 함수와 마찬가지로 선언에 throws
키워드가 있습니다.Swift : 오류가 try 문을 무시합니다.
내가 다음 코드 줄이 있습니다 때 노드
extension UInt8: XMLElementDeserializable {
public static func deserialize(_ element: XMLElement) throws -> UInt8 {
return UInt8(element.text)!
}
}
이 작동 : 라이브러리가 UInt8
에 대한 디시리얼라이저가 포함되어 있지 않습니다
let myValue : UInt8 = try? xml["Root"]["ValueNode"].value()
이후를, 나는 내 자신을 정의한 가치가있다. 그러나 노드가 존재하지 않거나 nil 인 경우 다음 줄에서 오류가 발생합니다.
return UInt8(element.text)! // Fatal error: Unexpectedly found nil while unwrapping an Optional value
이것은 분명히 발생합니다. 내가 이해하지 못하는 이유는이 오류가 내 try?
문에 걸리지 않고 해당 오류를 던지는 대신 nil
을 반환하는 이유입니다.
아무도 도와 줄 수 있습니까?
'throws '와'try'를 사용하면 치명적인 오류를 처리 할 수 없습니다. 치명적입니다. optional을 다루기 위해서는 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