网络中的 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 是一个空数组,但是没有抛出任何错误。
我在 if 和 else 语句上使用了断点,程序实际上没有执行它们。
URLSession
的标准dataTask
必须恢复
URLSession
.shared
.dataTask(with: url) { data, response, error in
...
}
.resume()
另一种选择是 Combine 的 .dataTaskPublisher(for
在 RestManager class 中,我想使用 URLSession return AnyPublisher
所以我做了这个代码
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 是一个空数组,但是没有抛出任何错误。 我在 if 和 else 语句上使用了断点,程序实际上没有执行它们。
URLSession
的标准dataTask
必须恢复
URLSession
.shared
.dataTask(with: url) { data, response, error in
...
}
.resume()
另一种选择是 Combine 的 .dataTaskPublisher(for