struct Email {
struct Constraints {
static let top = 20.asConstraint()
}
static let placeholder = "login_email"
}
如何解决这个问题?
SwiftLint的这一特定规则 ,之前nesting
已在以下问答中讨论过:
有一些共识认为,这条规则不是基于技术原因,而是似乎是一种基于意见的“最佳实践”规则,显然不是 Swift 标准库(经常使用嵌套类型)遵循的规则。此外,Swift 语言指南,特别是Nested Types Section,没有包含针对深度超过 1 的嵌套类型的警告/建议。
... 类型可以根据需要嵌套到尽可能多的级别。
可以在SwiftLint 问题 1450中找到此(基于意见的规则)的一个动机:
杰普西姆:
嵌套规则的存在有两个原因:
- 避免 API 中过度嵌套的类型
- 避免过度缩进的陈述(又名末日金字塔)
...
基于以上所述,除非您发现您的代码变成了不可读的末日意大利面条金字塔(我认为您的示例中并非如此),否则您可以简单地考虑禁用该nesting
规则:
// swiftlint:disable nesting
您可以创建另一个结构:
struct Email {
let constraints = EmailConstraints()
let placeholder = "login_email"
}
struct EmailConstraints {
let top = 20.asConstraint()
}
正如您稍后在评论中提到的,由于这只是一个 linter 错误,您可以在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