gpt4 book ai didi

xcode10 - 将错误绑定(bind)到变量的 Swift Catch 模式

转载 作者:行者123 更新时间:2023-12-03 18:40:53 25 4
gpt4 key购买 nike

使用 Swift 4.2 和 XCode 10

在 Swift 4.2 中,DecodingError 是一个枚举。 (目前)有四种不同的情况。我可以分别捕获每种情况,并绑定(bind)可用于记录错误的变量,如下面的代码...

do {
let model = try jsonDecoder.decode(BattleShip.self, from: jsonData!)
print(model)
} catch DecodingError.dataCorrupted(let context) {
print(context.debugDescription)
} catch DecodingError.keyNotFound(let key, let context) {
print("\(key.stringValue) was not found, \(context.debugDescription)")
} catch DecodingError.typeMismatch(let type, let context) {
print("\(type) was expected, \(context.debugDescription)")
} catch DecodingError.valueNotFound(let type, let context) {
print("no value was found for \(type), \(context.debugDescription)")
} catch {
print("I know not this error")
}

但这是很多代码放在我可能遇到解码错误的任何地方。而且,如果我的 do{} block 有多个抛出的调用,我可能需要处理这些方法以不同方式调用的错误。我试图实现的模式看起来像这样......其中 decoderError(error) 有上面所有的凌乱代码
do {
let object1 = try decoder.decode(SomeClass.self, from: someData)
try object2.methodThatThrowsSomeOtherError()
} catch <all decoding errors> { // this is invalid pseudocode
MyCentralLogger.log.decodingError(error)
} catch let nonDecodingError {
MyCentralLogger.log.error(nonDecodingError)
}

我可以有一个像这样的捕获模式,它似乎满足所有枚举案例(至少它编译)
} catch is DecodingError {

但编译器似乎没有自动绑定(bind)“错误”变量,而且我没有看到任何类似的选项
} catch let decodingError is DecodingError {  // THIS IS NOT VALID

如果我只是捕获所有错误,我可以轻松地在中央方法中进行切换,以适本地分离不同的解码错误情况。但我希望能够避免将非解码错误发送到该开关。我还可以将我的 do{} block 分开,这样我就只在其中执行解码步骤,但这也会使代码变得困惑,尤其是在解码散布于其他操作的多条消息时。

建议?谢谢大家!

最佳答案

catch 中使用的语法行与 case 中使用的模式语法完全相同。的 switch .如果你知道如何写 case你知道怎么写catch .

因此,例如,您提示:

} catch let decodingError is DecodingError {  // THIS IS NOT VALID

对。但这是有效的:
} catch let decodingError as DecodingError { 

哦,一封信有多大的不同。

关于xcode10 - 将错误绑定(bind)到变量的 Swift Catch 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54010536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com