объявляя универсальный функционал для всех остальных API-сервисов - PullRequest
0 голосов
/ 30 сентября 2018

Я пытаюсь написать универсальный func, который принимает объект модели url и T, затем создает запрос GET и возвращает объект.

, когда я вызываю ошибку func: общий параметр 'T' не может бытьвывод.

override viewdidload(){

        companyRequest(company: Company, urlString: url)  // error is here

}

  fileprivate func companyRequest<T:Mappable>(company:T,urlString:String){



        guard let url=URL(string: urlString) else {return}

        print(url)

        URLSession.shared.dataTask(with: url) { (data, response, error) in

            if let response = response {

                let responseCode = response as? HTTPURLResponse


                switch  (responseCode?.statusCode)!  {

                case 200,201 :

                    print(data!)
                    let content = Mapper<T>().map(JSONObject: data)
                    print(content?.toJSON())
                    //self.getCompanysuccessfull(data: data!,T)
                    //self.completion(true,code!)
                    break
                case 400,500,404 :
                    self.DisplayError(errorCode: (responseCode?.statusCode)!)
                    break

                default :
                    self.DisplayError(errorCode: (responseCode?.statusCode)!)

                }

            }
            }.resume()



    }

1 Ответ

0 голосов
/ 30 сентября 2018

Вам нужно сделать два изменения ...

При определении функции, которая принимает тип, вам нужно сделать:

func companyRequest<T: Mappable>(company: T.Type, urlString: String)

В качестве причины, почему всессылки на "company" в приведенной выше декларации, когда этот код должен работать с любым отображаемым типом?

Обратите внимание на .Type, который вы пропустили.

Затем при вызове кода, вы должны добавить .self как это:

companyRequest(company: Company.self, urlString: url)
...