Home > Software design >  Call function with completion handler
Call function with completion handler

Time:01-12

I created the function below but I'm not sure how to call it, it complains saying:

Type 'T.Type' cannot conform to 'Decodable' 

Here's how I'd like to call it:

let result = getApiData(modelToDecode: MyModel, url: "abc")

This is what I've tried:

func getApiData<T : Decodable>(modelToDecode: T.Type, url: String) -> Any? {
    // I get an error below
    fetchDataAndDecode(url: String, modelToDecode: T.Type) { result in
    }

    // temp placeholder
    return nil
}

func fetchDataAndDecode<T : Decodable>(url: String, modelToDecode: T.Type, completionHandler: @escaping (Result<T.Type, NetworkError>) -> Void) {
    guard let url = URL(string: url) else {
        completionHandler(.failure(NetworkError.badURL))
        return
    }

    AF.request(url, method: .get).validate().responseData { response in
        guard let data = response.data else {
            completionHandler(.failure(NetworkError.apiFailed))
            return
        }

        do {
            // Decode the data
            let decodedData = try JSONDecoder().decode(modelToDecode.self, from: data)
            DispatchQueue.main.async {
                completionHandler(.success(decodedData as! T.Type))
            }
        } catch(let error) {
            print("           
  •  Tags:  
  • Related