我无法使Xcode接受以下代码。
enum FooError : Error {}
class FooTest {
func slowMethod() async throws {
try await withCheckedThrowingContinuation { (c: CheckedContinuation<Void, FooError>) -> Void in
}
}
}
获取以下编译错误:Cannot convert value of type '(CheckedContinuation<Void, FooError>) -> Void' to expected argument type '(CheckedContinuation<Void, any Error>) -> Void'. Arguments to generic parameter 'E' ('any Error' and 'FooError') are expected to be equal
withCheckedThrowingContinuation
是否可以接受自定义错误?
编辑
下面的评论,这也不起作用:
enum FooError : Error {}
class FooTest {
func slowMethod() async throws {
try await withCheckedThrowingContinuation { (c: CheckedContinuation<Void, Error>) -> Void in
c.resume(throwing: FooError)
}
}
}
给出的误差为:Argument type 'FooError.Type' does not conform to expected type 'Error'
1条答案
按热度按时间swvgeqrz1#
我认为你误解了一些基本的东西。
FooError
本身是Type
,而不是value
。现在要获得
value
,在处理enum
时需要case
最后的代码看起来像这样。
注意,由于返回值是
Void
,因此我使用的是withUnsafeThrowingContinuation
withCheckedThrowingContinuation
希望您调用c.resume(/* some return value */)
如果使用
LocalizedError
,则可以提取辅助Error