我在从 api 获取英语数据时遇到问题 - iOS swift

问题描述 投票:0回答:1

这是函数,在邮递员中,当我输入Accept-Language“en”时,它会得到英文数据,但我的代码却没有,为什么

func fetchDataByToken<T: Decodable>(urlString: String, type: T.Type) -> AnyPublisher<T, APIError> {
        guard let token = UserManager.shared.getToken() else {
            return Fail(error: APIError.serverError)
                .eraseToAnyPublisher()
        }
        guard let url = URL(string: urlString) else {
            return Fail(error: APIError.invalidURL)
                .eraseToAnyPublisher()
        }
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("en", forHTTPHeaderField: "Accept-Language")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
        return URLSession.shared.dataTaskPublisher(for: request)
            .tryMap { output -> Data in
                guard let response = output.response as? HTTPURLResponse,
                      response.statusCode >= 200 && response.statusCode < 300 else {
                    throw APIError.invalidData
                }
                return output.data
            }
            .decode(type: T.self, decoder: JSONDecoder())
            .mapError { _ in
                APIError.invalidData
            }
            .eraseToAnyPublisher()
    }

我希望数据是英文的

swift api swiftui uikit combine
1个回答
0
投票

您从应用程序发送的 URL 请求与通过 Postman 发送的 URL 请求之间可能不匹配。您可以使用 Xcode 中的网络工具(仅在真实设备上,而不是模拟器上)来查看发出的确切请求。请参阅文档: https://developer.apple.com/documentation/foundation/url_loading_system/analyzing_http_traffic_with_instruments

我个人更喜欢使用 Proxyman 进行此类网络跟踪,因为我可以捕获和分析任何设备上的流量,而无需将 Xcode 会话连接到该设备。请参阅https://proxyman.io

另外,如果有任何方法可以改变它,我建议您使用 async/await 而不是合并。根据我的经验,Combine 很难阅读,很难调试,也很难编写测试;它似乎已被降级,并且大多数新代码在可能的情况下使用 async/await 代替。

© www.soinside.com 2019 - 2024. All rights reserved.