Каков наилучший подход для вызова одного и того же API из нескольких контроллеров представления - PullRequest
0 голосов
/ 10 июня 2019

У меня есть более 20 контроллеров представления в приложении. Теперь я вызываю определенный API из двух разных контроллеров представления, чтобы получить данные с сервера. Каков наилучший подход для уменьшения повторения кода?

Ответы [ 2 ]

0 голосов
/ 10 июня 2019

Вы можете создать singleton для поддержки всех ваших API calls как:

class APIManager {
    static let shared = APIManager()
    private init() {}

    func fetchData(with urlString: String, handler: ((Model?, Error?)->())?)  {
        //Add other params as per your requirement...
        if let url = URL(string: urlString) {
            URLSession.shared.dataTask(with: url) { (data, response, error) in
                //parse your data here...
                handler?(model, error) //model is the object you got after parsing the data..
            }.resume()
        }
    }
}

В вашем ViewController вы можете использовать его как:

class VC: UIViewController {
    func fetchData() {
        APIManager.shared.fetchData(with: "YOUR_URL_STRING") { (model, error) in
            //Use model here...
        }
    }
} 

В приведенном выше коде я взял пример URLSession для вызова API.Вы можете использовать другие способы, такие как третьи стороны (Alamofire и т. Д.) Согласно вашему требованию.

0 голосов
/ 10 июня 2019

Создайте

class Api {

  static func getData(completion:@escaping:([Model]) -> ()) { // suppose you receive an array 
     // api call here {
        comletion(data)
     }
 }

Затем назовите это так внутри любого vc

Api.getData { (data) in
   print(data)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...