struct Email {
struct Constraints {
static let top = 20.asConstraint()
}
static let placeholder = "login_email"
}
Как решить эту проблему?
struct Email {
struct Constraints {
static let top = 20.asConstraint()
}
static let placeholder = "login_email"
}
Как решить эту проблему?
Это конкретное правило SwiftLint, nesting
уже обсуждалось в следующих вопросах и ответах:
С некоторым консенсусом в отношении того, что это правило не основано на технической причине, а, скорее, кажется основанным на мнении правилом «наилучшей практики», которое заметно не соблюдается, например. стандартными библиотеками Swift (которые часто используют вложенный тип). Более того, руководство по языку Swift, в частности Раздел о вложенных типах, не содержит предупреждений/рекомендаций против вложения типов глубже, чем глубина 1.
... Типы могут быть вложены на любом количестве уровней.
Один из мотивов для этого (правило, основанное на мнении) можно найти в SwiftLint issue 1450:
jpsim:
Правило вложенности существует по двум причинам:
- чтобы избежать чрезмерно вложенных типов в API
- чтобы избежать чрезмерных отступов (также известных как пирамида судьбы)
...
Основываясь на вышеизложенном, если вы не обнаружите, что ваш код превращается в нечитаемую пирамиду дум-спагетти (чего я не думаю в вашем примере), вы можете просто рассмотреть возможность отключения правило nesting
:
// swiftlint:disable nesting
Вы можете создать другую структуру:
struct Email {
let constraints = EmailConstraints()
let placeholder = "login_email"
}
struct EmailConstraints {
let top = 20.asConstraint()
}
Как вы упомянули позже в комментариях, поскольку это всего лишь ошибка линтера, вы можете отключить это правило в файле swiftlint.yml.
попробуйте добавить это правило в свой .swiftlint.yml
nesting:
type_level:
warning: 3 --> this means the warning appears if you nest 3 level deep instead of 1
error: 6
statement_level:
warning: 5
error: 10
Ссылка: https://realm.github.io/SwiftLint/nesting.html
swiftlint
. Итак, просто отредактируйте файл правил - person Alladinian   schedule 16.10.2017enum
обрабатывались как объявление типа (например,enum
внутриstruct
выдавало это предупреждение), но это было исправлено. См. проблему 190. В приведенном выше примере кажется, что аналогично статическое свойствоtop
обрабатывается как объявление типа, нарушая ограничение глубины вложенности swiftlint:s, равное 1. - person dfrib   schedule 16.10.2017// swiftlint:disable nesting
). - person dfrib   schedule 16.10.2017