gpt4 book ai didi

swift - Swift 中非抛出函数的错误处理

转载 作者:行者123 更新时间:2023-11-28 12:13:15 26 4
gpt4 key购买 nike

我在处理非抛出函数(如重写方法、委托(delegate)方法或数据源方法)中的错误时遇到问题。我只是想到了记录错误,正如你所知,这不是一个好的错误处理策略。还有其他方法,方法等吗?谢谢。

编辑:

enum SomethingError : Error{
case somethingFailed
}

var anObject : AnObject?

........
........


public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell throws{
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", at: index)

guard let anObject = anObject else{
throw SomethingError.somethingFailed
//and maybe return unprocessed cell but you cannot return anything after "throw", or you cannot "throw" after "return"
}

.....
.....

return cell
}

你不能这样做,因为 :collectionView:cellForItemAt:indexPath 不是一个抛出函数,它必须返回一个单元格。我怎样才能在这里捕获错误?这就是问题。仅通过日志记录?

编辑:我知道我可以使用 if let我想捕捉/抛出;在此处处理错误。

最佳答案

您不能在没有明确要求的协议(protocol)实现中传播错误。

您可以在同一个实现中throw/catch 它们,或者简单地调用一个方法来处理错误。在您的示例中,您可以像这样使用 throw/catch:

public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell throws{
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", at: index)

do {

guard let anObject = anObject else {
throw SomethingError.somethingFailed
//and maybe return unprocessed cell but you cannot return anything after "throw", or you cannot "throw" after "return"
} catch SomethingError.somethingFailed {
// handle the error here
}

.....
.....

return cell
}

只要有一个函数,它就会是这样的:

func handleError() {
// handle error
}

public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell throws{
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", at: index)

guard let anObject = anObject else{
handleError()
return
}

.....
.....

return cell
}

有关 swift 错误处理的更多信息,您可以阅读:The Swift Programming Language: Error Handling

关于swift - Swift 中非抛出函数的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47738913/

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