gpt4 book ai didi

Swift 5.5 并发 : creating a task with custom error type

转载 作者:行者123 更新时间:2023-12-04 12:04:35 24 4
gpt4 key购买 nike

我需要在我创建的任务中使用我自己的自定义错误枚举:

enum MyError: Error {
case someError
}

var myTask: Task<MyModel, MyError> = Task { () throws -> MyModel in
// in case of an error:
// throw .someError
// ... perform some work
return MyModel()
}
但我在任务初始化程序的开头收到以下错误: Referencing initializer 'init(priority:operation:)' on 'Task' requires the types 'MyError' and 'Error' be equivalent .
我如何限制 Task只抛出属于我的自定义错误类型的错误 MyError ?

最佳答案

省略不必要的类型声明:

var myTask = Task { () throws -> MyModel in
// in case of an error:
throw MyError.someError
// ... perform some work
return MyModel()
}
编译器隐式地(并且正确地)键入 myTask作为 Task<MyModel, Error> .编译器不在乎您抛出的是 MyError,因为这是一种 Error 形式。

好的,我现在明白问题只是你问错了问题。您想知道为什么不能将此 Task 声明为 Task<MyModel,MyError> .
原因是因为这个初始化器是如何声明的:
extension Task where Failure == Error {
public init(priority: TaskPriority? = nil, operation: @escaping @Sendable () async throws -> Success)
}
你有看到?此初始化程序仅可用 where Failure == Error .那是 == ,不是 : .使用这个初始化器不需要失败类型是一个错误,它要求它是错误。

关于Swift 5.5 并发 : creating a task with custom error type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68817336/

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