1. Группа/папка (название функции)

1.1. Модели

1.2. Взгляды

1.2.1. Посмотреть контроллеры

1.2.2. Клетки

1.2.3. Пользовательские представления

1.3. Посмотреть модели

1.4. Услуги

1.5. Обработчик базы данных

2. Сетевой клиент

3. База данных

4. Помощники

5. Расширения

6. Константы

6.1. перечисления

6.2. Структуры

6.3. Константы

struct Employees {
    let id:Int
}

protocol EmployeeServiceDelegate {
    func getEmployees(completion: @escaping (_ success: Bool, _ results: Employees?, _ error: String?) -> ())
}

class EmployeeService : EmployeeServiceDelegate {
    func getEmployees(completion: @escaping (Bool, Employees?, String?) -> ()) {
        //Perform network Request
    }
}

class EmployeeViewModel {
    
    private lazy var employeeService:EmployeeServiceDelegate? = nil
    
    init(employeeService: EmployeeServiceDelegate? = nil) {
        self.employeeService = employeeService
    }
    
    
    func getEmployees(completion: @escaping(Employees?)-> ()) {
        guard let employeeService = employeeService else { return }
        employeeService.getEmployees { success, results, error in
            //perform buisness logic , validations , manipulations
            completion(results)
        }
    }
}

class EmployeeViewController {
    
    private lazy var employeeViewModel:EmployeeViewModel? = nil
    
    func initViewModel() {
        employeeViewModel = EmployeeViewModel()
    }
    
    func fetchData(){
        guard let employeeViewModel = employeeViewModel else { return }
        employeeViewModel.getEmployees { [weak self] employees in
            guard let self = self else { return }
            //update UI
        }
    }
    
}