Generic Func: 无法转换键路径值类型“[T]”

Generic Func: Key path value type '[T]' cannot be converted

我正在玩 Combine 来学习它并提高我的反应式编程技能,我正在尝试创建一些通用的 class 将数据转换为我的 T类型

我有这个错误,我不明白为什么

Key path value type '[T]' cannot be converted to contextual type 'T'

class Fetcher<T: Codable>: ObservableObject {
    private var task: AnyCancellable?
    @Published var result = [T]()

    init<T: Codable> (type: T.Type) {
    guard let url = URL(string: "https://api.example.com") else { return }
    task = URLSession.shared.dataTaskPublisher(for: url)
        .map{[=10=].data}
        .decode(type: T.self, decoder: JSONDecoder())
        .receive(on: DispatchQueue.global(qos: .background))
        .replaceError(with: T.self as! T)
        .assign(to: \.result, on: self)
    }
}

由于 URL 给你一个 T 的数组,你应该解码一个数组,而不是 decode 调用中的单个 T。这一行

.decode(type: T.self, decoder: JSONDecoder())

应该是:

.decode(type: [T].self, decoder: JSONDecoder())

replaceError 调用会使您的应用程序崩溃,因为 T.self 不是 T(它是 T.Type),并且您正在强制转换。由于您正在接收一个数组,因此用一个值替换错误的逻辑选择是空数组 []:

.replaceError(with: [])

此外,删除 init 上的通用参数:

init() {