Техническое собеседование
- Обсуждение опыта на проектах, вопросы по архитектуре и системному дизайну, исходя из этого опыта.
Задание по коду (Swift Concurrency)
struct City {
let name: String
let population: Int
}
protocol CityRepository {
func getCityNames(_ completion: @escaping ([String]) -> Void)
func getPopulation(city: String, _ completion: @escaping (Int) -> Void)
}
class CityUseCase {
private let cityRepository: CityRepository
init(cityRepository: CityRepository) {
self.cityRepository = cityRepository
}
func execute(_ completion: @escaping ([City]) -> Void) {
cityRepository.getCityNames { [weak self] cityNames in
guard let self = self else { return }
var cityes: [City] = []
let group = DispatchGroup()
for cityName in cityNames {
group.enter()
self.cityRepository.getPopulation(city: cityName) { getPopulation in
cityes.append(City(name: cityName, population: getPopulation))
group.leave()
}
}
group.notify(queue: .main) {
completion(cityes)
}
}
}
}
- Проанализируйте предоставленный Swift код.
- Объясните, что делает этот код.
- Какие потенциальные проблемы или улучшения вы видите в этом коде?
- Объясните использование
DispatchGroup.
- Объясните использование
weak self и guard let self.
- Как бы вы обработали ошибки в этом коде?
- Как бы вы протестировали этот код?
Вложения
