- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
正在审查我的同事代码,出现此错误。
任何想法有什么问题?正在尝试运行构建,不幸的是出现此错误
错误 -> Trailing closure passed to parameter of type 'Set<HTTPMethod>' that does not accept a closure
试图在 DataResponseSerializer<T>
上更改它不适合我
错误行 -> let responseSerializer = DataResponseSerializer { (request, response, data, error) in
代码在这里
import Foundation
import Alamofire
extension DataRequest {
/// @Returns - DataRequest
/// completionHandler handles JSON Object T
/// - Returns: `DataRequest`
@discardableResult func responseObject<T: Decodable> (
queue: DispatchQueue? = nil,
_ type: T.Type,
completionHandler: @escaping (AFDataResponse<T>) -> Void
) -> Self {
let responseSerializer = DataResponseSerializer { (_, response, data, error) in
if let err = error {
return .failure(err)
}
let result = DataRequest.serializeResponseData(response: response, data: data, error: error)
let jsonData: Data
switch result {
case .failure(let error):
return .failure(error)
case .success(let data):
jsonData = data
}
// (1)- Json Decoder. Decodes the data object into expected type T
// throws error when failes
let decoder = JSONCoders.snakeCaseDecoder
do {
let decoded = try decoder.decode(T.self, from: jsonData)
return .success(decoded)
} catch let error {
return .failure(error)
}
}
return response(queue: queue, responseSerializer: responseSerializer, completionHandler: completionHandler)
}
}
编辑 1:
DataResponseSerializer {
那有什么不对呢。我已经尝试删除它们/添加新的。不知道这里有什么问题。我目前无法运行此错误的构建原因。
/// A `ResponseSerializer` that performs minimal response checking and returns any response data as-is. By default, a
/// request returning `nil` or no data is considered an error. However, if the response is has a status code valid for
/// empty responses (`204`, `205`), then an empty `Data` value is returned.
public final class DataResponseSerializer: ResponseSerializer {
public let dataPreprocessor: DataPreprocessor
public let emptyResponseCodes: Set<Int>
public let emptyRequestMethods: Set<HTTPMethod>
/// Creates an instance using the provided values.
///
/// - Parameters:
/// - dataPreprocessor: `DataPreprocessor` used to prepare the received `Data` for serialization.
/// - emptyResponseCodes: The HTTP response codes for which empty responses are allowed. `[204, 205]` by default.
/// - emptyRequestMethods: The HTTP request methods for which empty responses are allowed. `[.head]` by default.
public init(dataPreprocessor: DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor,
emptyResponseCodes: Set<Int> = DataResponseSerializer.defaultEmptyResponseCodes,
emptyRequestMethods: Set<HTTPMethod> = DataResponseSerializer.defaultEmptyRequestMethods) {
self.dataPreprocessor = dataPreprocessor
self.emptyResponseCodes = emptyResponseCodes
self.emptyRequestMethods = emptyRequestMethods
}
public func serialize(request: URLRequest?, response: HTTPURLResponse?, data: Data?, error: Error?) throws -> Data {
guard error == nil else { throw error! }
guard var data = data, !data.isEmpty else {
guard emptyResponseAllowed(forRequest: request, response: response) else {
throw AFError.responseSerializationFailed(reason: .inputDataNilOrZeroLength)
}
return Data()
}
data = try dataPreprocessor.preprocess(data)
return data
}
}
最佳答案
您现在可能正在使用的 Alamofire 版本 5 与以前的版本相比有一些重大变化。 DataResponseSerializer
的初始化器不再获得像 Alamofire 4 这样的闭包参数。
但是,您可以更轻松地实现您想要的目标,因为 Alamofire 5 已经有了 responseDecodable(of:queue:decoder:completionHandler:)
函数,您可以在其中传入您的自定义 JSONDecoder
并为您制作解码过程:
extension DataRequest {
/// @Returns - DataRequest
/// completionHandler handles JSON Object T
/// - Returns: `DataRequest`
@discardableResult func responseObject<T: Decodable> (
queue: DispatchQueue? = nil,
_ type: T.Type,
completionHandler: @escaping (AFDataResponse<T>) -> Void
) -> Self {
let decoder = JSONCoders.snakeCaseDecoder
return responseDecodable(
of: T.self,
queue: queue ?? .main,
decoder: decoder,
completionHandler: completionHandler
)
}
}
你甚至可以在没有
DataRequest
的情况下做到这一点在您提出请求时直接扩展。如果假设您对所有请求都使用通用函数,则您的代码可能如下所示:
func myGenericRequest<T: Decodable>(url: URL, completionHandler: @escaping (DataResponse<T, AFError>) -> Void) {
let decoder = JSONCoders.snakeCaseDecoder
AF.request(url).responseDecodable(decoder: decoder, completionHandler: completionHandler)
}
关于swift - 尾随闭包传递给不接受闭包的 'Set<HTTPMethod>' 类型的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63992079/
在 Udacity Developing Scalable Apps with Java course ,后端应用程序的一些 API 方法(概念上应该是 HttpMethod.GET )是使用 Htt
这不会编译。为什么?错误消息令人困惑,为什么模式中不存在该属性? match System.Net.Http.HttpMethod.Post with | System.Net.Http.HttpMe
我将 HttpClient 3..0.1 与 MultiThreadedHttpConnectionManager 结合使用,并使用以下代码来获取页面并获取该页面的最终重定向 URL。 多个线程并行访
我有一个 API 请求,它应该 POST 一些 json: class func makeAPICall (serializedJSONObject contentMap: Dictionary, c
我在 XCode 中有以下方法: - (void)makeRequest:(NSString *)wPin withMethod:(NSString *)HTTPMethod passValue:(N
我试图将 http 方法设置为 POST,但 Xcode 说它是一个只获取属性。 我是这样做的: request.HTTPMethod = "POST" Apple 文档说我必须这样声明 httpM
我正在使用 HttpClient,我需要为 HttpMethod 设置一个非标准类型。在使用 HttpWebRequest 时只需要一个字符串,而 HttpClient 需要一个 HttpMethod
我有一个 asp.net Web API 项目,在我的 WebApiConfig 文件中,我定义了以下路由: config.Routes.MapHttpRoute( name: "Web AP
我正在尝试创建一个方法来调用基于 HttpMethod 的其他方法。我的方法如下所示: public async Task CreateAsync(HttpClient client, string
我们正在使用 PostMethod在 org.apache.commons.httpclient.methods 并注意到 recycle method来自 HttpMethod 接口(interfa
正在查看 Apache 对 HttpClient 的建议 ( http://hc.apache.org/httpclient-3.x/performance.html )其中提到了 Response
在Reference of HttpRequest.HttpMethod在 .NET Framework 中,请求类型使用 System.String 类型声明。 在RFC 2616声明了所有 HTT
在 Reference of HttpRequest.HttpMethod在 .NET Framework 中,请求类型声明为 System.String 类型。 在 RFC 2616声明了所有 HT
正在审查我的同事代码,出现此错误。 任何想法有什么问题?正在尝试运行构建,不幸的是出现此错误 错误 -> Trailing closure passed to parameter of type 'S
我有: import sendgridClient from '@sendgrid/client' sendgridClient.setApiKey(process.env.SENDGRID_API_
我正在使用.net Web API V1 构建一些restful api。 我们正在尝试为 Web API 定义一些路由。我在定义“放置”和“补丁”的路线时遇到一些问题。 它们具有相同的 URL,唯一
我使用 HttpClient 和 HttpMethod 来触发我的 REST 服务,但如果我想为 put 方法提供一些内容,它不起作用。服务在网络服务器上触发,但内容为空。 public boolea
request 是来自 System.Net.Http 的 HttpRequestMessage,我正在尝试使用模式匹配来确定使用了哪种方法提出请求。 这是一个证明我的问题的人为例子: let m =
Foundation 是否为支持的 HTTPMethod 值(例如 GET、POST 等)提供 NSString 常量? 搜索了 NSURLRequest 文档,但找不到任何内容。 最佳答案 据我所知
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 3 年前。 Improve th
我是一名优秀的程序员,十分优秀!