我想構建一個完整的Swift錯誤處理和傳播系統,我可以在整個應用程序中使用它。實現是相當簡單的,如果你有這樣的事情:Swift錯誤處理和錯誤的元數據
enum AnnouncerError: Error {
/// A network error occured
case networkError
/// The program was unable to unwrap data from nil to a non-nil value
case unwrapError
/// The parser was unable to validate the XML
case validationError
/// The parser was unable to parse the XML
case parseError
}
像這樣使用一個簡單的switch語句,我可以得到錯誤的類型的委託功能:
func feedFinishedParsing(withFeedArray feedArray: [FeedItem]?, error: AnnouncerError?) {
// unwrap the error somewhere here
switch error {
case .networkError:
print("Network error occured")
case .parseError:
print("Parse error occured")
case .unwrapError:
print("Unwrap error occured")
default:
print("Unknown error occured")
}
}
然而,我從錯誤enum
特定情況下有更多的數據,這就是當問題出現:
enum AnnouncerError: Error {
/// A network error occured
case networkError(description: String) //note this line
/// The program was unable to unwrap data from nil to a non-nil value
case unwrapError
/// The parser was unable to validate the XML
case validationError
/// The parser was unable to parse the XML
case parseError
}
我應該如何得到description
錯誤類型的字符串,如果我用.networkError
調用委託方法?作爲擴展,如果沒有直接的方式從.networkError
直接獲取description
,我應該繼續使用當前的體系結構,其中委託方法有一個可選(可爲空)的錯誤類型,我可以在其中檢查錯誤還是應該使用完全不同的體系結構,如try-catch系統,如果是這樣,我應該如何實現它?
可能相關:[附加數據的Swift 3錯誤](http://stackoverflow.com/questions/41202869/swift-3-errors-with-additional-data)和[如何提供本地化的描述與錯誤鍵入Swift?](http://stackoverflow.com/questions/39176196/how-to-provide-a-localized-description-with-an-error-type-in-swift)。 –