Ios 处理两个不同的http json响应

Ios 处理两个不同的http json响应,ios,swift,nsurlsession,jsondecoder,Ios,Swift,Nsurlsession,Jsondecoder,我有一个API,它给了我两种不同的响应 以下是数据正确且我有对象时的情况: { "latlng": [My Objects] } 当我的数据为空时: [] 所以我的问题是,当我使用jsonDecoder时,如何处理这个空响应 我的网络功能: func performNetworkingTaskWithParams<T: Codable>(endpoint: EndPointType, type: T.Type, params: [String : String],complet

我有一个API,它给了我两种不同的响应

以下是数据正确且我有对象时的情况:

{ "latlng": [My Objects] }
当我的数据为空时:

[]
所以我的问题是,当我使用jsonDecoder时,如何处理这个空响应

我的网络功能:

 func performNetworkingTaskWithParams<T: Codable>(endpoint: EndPointType, type: T.Type, params: [String : String],completion: ((_ response: T)-> Void)?) {
    let url = endpoint.baseURL.appendingPathComponent(endpoint.path)

    let config = URLSessionConfiguration.default
    config.httpAdditionalHeaders = [
        "Accept" : "application/json",
        "Content-Type" : "application/x-www-form-urlencoded"
    ]

    var urlRequest = URLRequest(url: url)

    let session = URLSession(configuration: config)

    urlRequest.encodeParameters(parameters: params)

    let taskSession = session.dataTask(with: urlRequest) { (data, response, error) in
        if let myError = error {
            print("request error:\(myError)")
            return
        }

        guard let responseData = data else {
            print("response is null!")
            return
        }


        let response = Response(data: responseData)

        guard let decoded = response.decode(type) else {
            print("cannot decode data!")
            return
        }
        completion?(decoded)
    }

    taskSession.resume()
}
func performNetworkingTaskWithParams(端点:EndPointType,type:T.type,params:[String:String],completion:((响应:T)->Void)?){
让url=endpoint.baseURL.appendingPathComponent(endpoint.path)
让config=URLSessionConfiguration.default
config.httpAdditionalHeaders=[
“接受”:“应用程序/json”,
“内容类型”:“应用程序/x-www-form-urlencoded”
]
var urlRequest=urlRequest(url:url)
let session=URLSession(配置:config)
urlRequest.encodeParameters(参数:params)
让taskSession=session.dataTask(带:urlRequest){(数据、响应、错误)在
如果让myError=error{
打印(“请求错误:\(myError)”)
返回
}
guard let responseData=其他数据{
打印(“响应为空!”)
返回
}
让响应=响应(数据:responseData)
guard let decoded=响应。解码(类型)else{
打印(“无法解码数据!”)
返回
}
完成?(已解码)
}
taskSession.resume()
}

codable
结构中,您应该实现自定义init并将数据设置为可选项


init(来自解码器:解码器)抛出{
let values=try decoder.container(keyedBy:CodingKeys.self)
YourField=try?values.decode(typeofield.self,forKey:.YourField)
}