У меня есть этот код:
struct ServerConnect {
enum Result<T> {
case succes(T)
case error(String)
}
typealias completionHandler = (Result<Data >) -> ()
func getJsonFromServer(parameters: String, completion: @escaping completionHandler) {
let fullUrlString = ApiConstans.fullPath + parameters
guard let url = URL(string: fullUrlString) else {
return completion(.error("ServerConnect01 - Error 100: Problem with url "))
}
URLSession.shared.dataTask(with: url) { (data, response, error) in
guard error == nil else {
return completion(.error("ServerConnect02 - Error 101: Problem with data "))
}
guard let data = data else {
return completion(.error("ServerConnect03 - Error 103: Problem with data "))
}
return completion(.succes(data))
}.resume()
}
func checkUsersLogin(login: String?, password: String?, completion: @escaping completionHandler) {
self.getJsonFromServer(parameters: "?action=LOGOWANIE&login=\(login!)&password=\(password!)", completion: completion)
}
func getJsonProducts( completion: @escaping completionHandler) {
self.getJsonFromServer(parameters: "?action=GET_PRODUCTS&lang=" + (AppGlobalManager.sharedManager.loggedUser?.selectedLanguage)! + "®ion=" + String((AppGlobalManager.sharedManager.loggedUser?.selectedRegion)!), completion: completion)
}
func getJsonRegions( completion: @escaping completionHandler) {
self.getJsonFromServer(parameters: "?action=GET_REGIONS&lang=" + (AppGlobalManager.sharedManager.loggedUser?.selectedLanguage)!, completion: completion)
}
func getJsonNews( completion: @escaping completionHandler) {
self.getJsonFromServer(parameters: "?action=GET_KARTY_AKTUALNOSCI&lang=" + (AppGlobalManager.sharedManager.loggedUser?.selectedLanguage)! + "®ion=" + String((AppGlobalManager.sharedManager.loggedUser?.selectedRegion)!)+"&userType=" + (AppGlobalManager.sharedManager.loggedUser?.userType)! + "&iOS", completion: completion)
}
}
cms.getJsonProducts(completion: { (data) in
switch data {
case .succes(let data):
DispatchQueue.main.async {
EZLoadingActivity.show("LoadingMessage1".localized(), disableUI: true)
}
self.saveJsonFileToTheDiskProducts(path: (AppGlobalManager.sharedManager.loggedUser?.selectedLanguage)! + "/json", downloadData: data)
case .error(let error):
self.errorLoginMessage(txt: "MainView - Error 101: Configuration files can not be created. \(error)", title: "Blad".localized())
break
}
})
cms.getJsonNews( completion: { (data) in
switch data {
case .succes(let data):
DispatchQueue.main.async {
EZLoadingActivity.show("LoadingMessage2".localized(), disableUI: true)
}
self.saveJsonFileToTheDiskNews(path: (AppGlobalManager.sharedManager.loggedUser?.selectedLanguage)! + "/json", downloadData: data)
case .error(let error):
self.errorLoginMessage(txt: "MainView - Error 105: News files can not be created. \(error)", title: "Blad".localized())
break
}
})
cms.getJsonRegions(completion: { (data) in
switch data {
case .succes(let data):
DispatchQueue.main.async {
EZLoadingActivity.show("LoadingMessage3".localized(), disableUI: true)
}
self.saveJsonFileToTheDiskRegions(path: (AppGlobalManager.sharedManager.loggedUser?.selectedLanguage)! + "/json", downloadData: data)
case .error(let error):
self.errorLoginMessage(txt: "MainView - Error 106: Regions files can not be created. \(error)", title: "Blad".localized())
break
}
})
В каждой функции, отображающей загрузчик:
DispatchQueue.main.async { EZLoadingActivity.show("LoadingMessage1".localized(), disableUI: true)
}
Мне бы хотелось, чтобы после того, как были выполнены все три потока (cms.getJsonProducts,cms.getJsonRegions, cms.getJsonNews), загрузчик скрыт.Как это сделать?Как синхронизировать эти 3 потока, чтобы скрыть этот загрузчик?
Кто-нибудь знает, как это сделать?