Ну можно сразу return и case 0...1:
Можешь через полиморфизм
https://refactoring.guru/smells/switch-statements
Красивее написать это конечно хорошо, а советы с полимрофизмом ещё “лучше”, ну тут бы посмотреть на контекст. ____ Первое, что действительно плохо, так это то, что у тебя тонна методов связанных с layout зачем-то являются методами контроллера? Зачем контроллеру это знать? Тут можно сделать две вещи, первое из которых дополнить NSCollectionLayoutSection, которые можно расширить в едином файле, если лайаут не сильно сложный, либо разделить на файлы типа NSCollectionLayoutSection+OrderInfo.swift extension NSCollectionLayoutSection { static func orderInfo( using configuration: UICollectionLayoutListConfiguration, layoutEnvironment: NSCollectionLayoutEnvironment ) -> NSCollectionLayoutSection { // … } } и так далее Второй способ, если у тебя создание лайаута сопряжено с каким-то данными, возможно внутри контроллера, в таком случае можно определить свой сабкласс final class MyCollectionViewCompositionalLayout: UICollectionViewCompositionalLayout передать нужные данные, создать новый convinence инициализатор и написать статичные. методы для создания каждой секции. ____ Вторым плохим местом является отсутствие какой-либо связи между секцией и её значением. Сегодня нулевая секция является OrderInfo, а завтра она ею быть перестанет. И эта связь не прослеживается в коде. Именно за этим приходит на помощь DiffableDataSource, который вполне может иметь секции типа: enum Section: Int, Hashable { case orderInfo case summary case total // ... } Который можно использовать как-то так let provider: UICollectionViewCompositionalLayoutSectionProvider = { switch Section(rawValue: $0) { case .orderInfo: return .orderInfo(using: ..., layoutEnvironment: $1) case .summary: ... case .total: ... default: preconditionFailure() } } P.S. А вот бежать от множества case`ов нет никакого смысла, switch решает ровно ту задачу, которую от него и ждут и это работает куда быстрее. Ну и главное, нет никакого смысла браться за полиморфизм, где единственной причиной его использования является разрешение эфемерной проблемы множества case`ов… Да и тут он не поможет.
Обсуждают сегодня