从多个视图控制器调用相同API的最佳方法是什么

时间:2019-06-10 10:41:49

标签: ios swift

我在一个应用程序中有20多个视图控制器。现在,我从2个不同的视图控制器调用特定的api,以从服务器获取数据。减少代码重复的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

创建

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)
}

答案 1 :(得分:0)

您可以创建 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等)。