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