172 похожих чатов

4 ответов

1 просмотр

Ну можно сразу 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`ов… Да и тут он не поможет.

Похожие вопросы

Обсуждают сегодня

читать файл максимально быстро? странный вопрос))
zamtmn
53
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
1
Святости? Когда дотумкаешь что открытое лучше закрытого - кастани
zamtmn
9
я имею в виду официально интегрированный в телегу? в том плане что не сливает переписку с пользователем?
Andrey
9
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
А чего сейчас в моде вместо Error для эксепшенов? А то я тут внезапно узрел что он не рекомендуется :) У Try::Tiny какой-то совершенно ужасный синтаксис если надо конкретные э...
Denis F
19
Кто-нибудь решал проблему с автоматическим скроллингом к выбранной ячейке в TDBGrid в Lazarus? Проблема в том, что есть допустим 3 столбца, третий столбец виден наполовину, вк...
Дмитрий Логинов
1
Приветствуем всех! Устали без проектов? Если вы программист и хотите получать стабильные заказы, компания Elif предлагает вам недельный курс по поиску проектов и их ведению. ...
Elif
1
ты вот так хотел? а пурджить arg бесполезно это не макрос, вот рестроить arg смысл есть, но в конце области видимости, а не перед началом новой области видимости.
ProMiNick
7
Карта сайта