Ios 类方法要求';AFDataResponse<;X>';符合可编码&;可编码

Ios 类方法要求';AFDataResponse<;X>';符合可编码&;可编码,ios,swift,alamofire,swift5,codable,Ios,Swift,Alamofire,Swift5,Codable,我已经在这里读了很多问题,但是没有答案帮助我解决了这个错误,我的结构是可编码的,并且只使用诸如String、Int和Double之类的数据类型 我把它们放在不同的档案里 struct Feature : Codable { var property: Properties? var geometry: Geometry? } struct Properties : Codable { let pk: Int var title: String = ""

我已经在这里读了很多问题,但是没有答案帮助我解决了这个错误,我的结构是可编码的,并且只使用诸如String、Int和Double之类的数据类型

我把它们放在不同的档案里

struct Feature : Codable {
    var property: Properties?
    var geometry: Geometry?
}

struct Properties : Codable {
    let pk: Int
    var title: String = ""
    var name: String = ""
    //var added: Date
}

struct Geometry : Codable {
    var type: String = ""
    var coordinates: [Double]?
}
这就是我得到错误的地方

CommunicationManager.request(endpoint: "url", onSuccess: { (response: AFDataResponse<Feature>) in
        print(response)
    })
CommunicationManager.request(端点:“url”,onSuccess:{(响应:AFDataResponse)在
打印(答复)
})
这是我的方法的定义

import Alamofire

typealias APIHeaders = HTTPHeaders
typealias APIParameters = [String: Any]

enum APIMethod {
    case get
    case post
    case delete
    case put

    fileprivate var value: HTTPMethod {
        switch self {
        case .get:
            return HTTPMethod.get
        case .post:
            return HTTPMethod.post
        case .delete:
            return HTTPMethod.delete
        case .put:
            return HTTPMethod.put
        }
    }
}

enum APIEncoding {
    case json
    case url

    fileprivate var value: ParameterEncoding {
        switch self {
        case .json:
            return JSONEncoding.default
        default:
            return URLEncoding.default
        }
    }
}

class APIError {
    var code: String?
    var message: String?

    init(message: String) {
        self.code = nil
        self.message = message
    }
}

class APISessionManager: Session {
    static let shared: APISessionManager = {
        let configuration = URLSessionConfiguration.default
        configuration.timeoutIntervalForRequest = 40
        configuration.requestCachePolicy = .reloadIgnoringLocalAndRemoteCacheData
        let manager = APISessionManager(configuration: configuration)
        return manager
    }()
}

class CommunicationManager {

    class func request<T: Codable>(endpoint: String,
                       method: APIMethod = .get,
                       encoding: APIEncoding = .url,
                       parameters: APIParameters? = nil,
                       headers: APIHeaders? = nil,
                       onSuccess: @escaping (T) -> Void,
                       onFailure: ((APIError)-> Void)? = nil){

        let request = APISessionManager
            .shared
            .request(endpoint,
                     method: method.value,
                     parameters: parameters,
                     encoding: encoding.value,
                     headers: headers)

        request.responseJSON(completionHandler: { response in

            guard response.error == nil else {
                onFailure?(APIError(message: "error"))
                return
            }

            guard let data = response.data else {
                onFailure?(APIError(message: "error"))
                return
            }

            guard let object = try? JSONDecoder().decode(T.self, from: data) else {
                onFailure?(APIError(message: "error"))
                return
            }

            onSuccess(object)
            print(response)

        })

    }

}
导入Alamofire
typealias APIHeaders=HTTPHeaders
typealias APIParameters=[字符串:任意]
枚举法{
案例获得
案例岗
案例删除
判例
fileprivate变量值:HTTPMethod{
切换自身{
案例。获取:
返回HTTPMethod.get
案件.员额:
返回HTTPMethod.post
案例.删除:
返回HTTPMethod.delete
案例。付诸表决:
返回HTTPMethod.put
}
}
}
枚举编码{
case-json
案例url
fileprivate变量值:参数编码{
切换自身{
case.json:
返回JSONEncoding.default
违约:
返回URLEncoding.default
}
}
}
类错误{
变量代码:字符串?
var消息:字符串?
初始化(消息:字符串){
self.code=nil
self.message=消息
}
}
类APISessionManager:Session{
静态let共享:APISessionManager={
let configuration=URLSessionConfiguration.default
configuration.timeoutitervalforrequest=40
configuration.requestCachePolicy=.reloadIgnoringLocalAndRemoteCacheData
let manager=APISessionManager(配置:配置)
退货经理
}()
}
类通信管理器{
类func请求(端点:字符串,
方法:APIMethod=.get,
编码:APIEncoding=.url,
参数:APIParameters?=nil,
标题:APIHeaders?=nil,
onSuccess:@escaping(T)->Void,
onFailure:((APIError)->Void)?=nil){
let request=APISessionManager
.共享
.请求(端点,
方法:method.value,
参数:参数,
编码:encoding.value,
标题:标题)
request.responseJSON(completionHandler:{response in
guard response.error==nil else{
onFailure?(APIError(消息:“error”))
返回
}
guard let data=response.data else{
onFailure?(APIError(消息:“error”))
返回
}
guard let object=try?JSONDecoder()。解码(T.self,from:data)else{
onFailure?(APIError(消息:“error”))
返回
}
onSuccess(对象)
打印(答复)
})
}
}

我真的不知道该怎么办,人们问的所有问题都得到了解决,因为他们使用了Image,或者其他一些不使用协议可编码的数据类型。在您描述的API中,
onSuccess
闭包将采用
功能
值,而不是
AFDataResponse