gpt4 book ai didi

swift - 在快速错误处理中重新抛出类/结构实例方法

转载 作者:可可西里 更新时间:2023-11-01 02:18:47 27 4
gpt4 key购买 nike

<分区>

我正在编写一个调用方法的结构,该方法会引发错误,但是我不想在这里处理错误,因为此时我无法做任何事情,我只想像你一样将它冒泡给我的调用者可以在 java/c# 中做。

例如编写一个具有嵌套结构的 Json 解析器:

struct InnerParser {

let dateFormatter: NSDateFormatter

init( dateFormatter: NSDateFormatter) {
self.dateFormatter = dateFormatter
}

func parse(json: JSON) throws -> Inner {
let id = json["id"].string

guard let actId = id, else {
throw ParserError.UnexepectedResponse(json)
}

return Inner(id: actId)
}

}

这很好,但问题出在这里:

struct MiddleParser {

let innerParser: InnerParser

init(innerParser: InnerParser) {
self.innerParser = innerParser
}

func parse(json: JSON) throws -> Middle {
let id = json["id"].string
var inners = [Inner]()
for (_, innerJson) in json["Inner"] {
do {
inners.append(try self.innerParser.parse(innerJson))
} catch (let error) {
throw error
}

}
guard let actId = id, where inners.count > 0 else {
throw ParserError.UnexepectedResponse(json)
}
return Middle(id: actId,inners:inners)
}
}

我必须做一个“do catch rethrow”,这看起来很笨拙,有没有办法只做一次尝试,而不是进入一个 catch,它会转义当前函数并在被调用者上引发错误?

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