У меня есть приложение, которое имеет 5 различных контроллеров представления, доступных через UITabBar.
Каждый из этих ViewControllers будет получать доступ к данным API через 5 различных URL-адресов, взятых из одного и того же источника API.
Как я могу повторно использовать приведенный ниже код запроса API, чтобы мне не приходилось повторять этот блок 5 раз в моем коде? Приведенный ниже код является моей текущей настройкой, а делегат является первым контроллером представления.
protocol ClubFixturesManagerDelegate {
func didUpdateTable (club: [ClubData])
func didFailWithError(error: Error)
}
struct MyClubFixturesManager{
let getclubListURL = "someURL"
var delegate: ClubFixturesManagerDelegate?
func getClubID(clubID: String){
let getClubResultsURL = "someURL"
performRequest(with: getClubResultsURL)
}
func performRequest(with urlString: String){
if let url = URL(string: urlString){
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("APIToken", forHTTPHeaderField: "Authorization")
//create URL session
let task = URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in
if error != nil{
self.delegate?.didFailWithError(error: error!)
return
}
if let safeData = data {
if let clubResults = self.parseJSON(safeData){
self.delegate?.didUpdateTable(club: clubResults)
}
}
}
task.resume()
}
}
func parseJSON(_ teamData: Data) -> [ClubData]?{
let decoder = JSONDecoder()
do{
var clubInfo: [ClubData] = []
let decodedData = try decoder.decode(ClubSeasonData.self, from: teamData)
for entry in decodedData.matches{
let updatedDate = ISO8601Converter.converter(for: entry.utcDate)
let clubInstance = ClubData(utcDate: updatedDate, homeTeam: entry.homeTeam.name, awayTeam: entry.awayTeam.name, homeTeamScore: entry.score.fullTime.homeTeam ?? nil, awayTeamScore: entry.score.fullTime.awayTeam ?? nil)
clubInfo.append(clubInstance)
}
return clubInfo
}
catch{
print(error)
}
return nil
}
}