网络中的 dataTask 未执行

dataTask in networking is not executing

在 RestManager class 中,我想使用 URLSession return AnyPublisher, Never>.

所以我做了这个代码

class RestManager {

func fetchData<T: Decodable>(url: URL) -> AnyPublisher<Result<T, ErrorType>, Never> {
    
    return Future<Result<T, ErrorType>, Never> { promise in
        URLSession
            .shared
            .dataTask(with: url) { data, response, error in
                if let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 {
                    if let data = try? JSONDecoder().decode(T.self, from: data!){
                        promise(.success(.success(data)))
                    }else {
                        promise(.success(.failure(.empty)))
                    }
                }
                else if let error = error as? URLError {
                    switch error.code {
                    case .notConnectedToInternet, .networkConnectionLost, .timedOut:
                        promise(.success(.failure(.noInternetConnection)))
                    case .cannotDecodeRawData, .cannotDecodeContentData:
                        promise(.success(.failure(.empty)))
                    default:
                        break
                }
                }else {
                    promise(.success(.failure(.general)))
                }
            }
    }
    .eraseToAnyPublisher()
}
}

但是当我在 viewModel 中调用这个函数时它 return 是一个空数组,但是没有抛出任何错误。 我在 ifelse 语句上使用了断点,程序实际上没有执行它们。

URLSession 的标准dataTask 必须恢复

URLSession
    .shared
    .dataTask(with: url) { data, response, error in

       ...

    }
    .resume()

另一种选择是 Combine 的 .dataTaskPublisher(for