8
struct Email {
    struct Constraints {
        static let top = 20.asConstraint()
    }

    static let placeholder = "login_email"
}

在此处输入图像描述

如何解决这个问题?

4

3 回答 3

12

SwiftLint的这一特定规则 ,之前nesting已在以下问答中讨论过:

有一些共识认为,这条规则不是基于技术原因,而是似乎是一种基于意见的“最佳实践”规则,显然不是 Swift 标准库(经常使用嵌套类型)遵循的规则。此外,Swift 语言指南,特别是Nested Types Section,没有包含针对深度超过 1 的嵌套类型的警告/建议。

... 类型可以根据需要嵌套到尽可能多的级别。

可以在SwiftLint 问题 1450中找到此(基于意见的规则)的一个动机:

杰普西姆

嵌套规则的存在有两个原因:

  • 避免 API 中过度嵌套的类型
  • 避免过度缩进的陈述(又名末日金字塔)

...

基于以上所述,除非您发现您的代码变成了不可读的末日意大利面条金字塔(我认为您的示例中并非如此),否则您可以简单地考虑禁用nesting规则

// swiftlint:disable nesting
于 2017-10-16T09:35:20.910 回答
5

您可以创建另一个结构:

struct Email {
    let constraints = EmailConstraints()
    let placeholder = "login_email"
}

struct EmailConstraints {
    let top = 20.asConstraint()
}

正如您稍后在评论中提到的,由于这只是一个 linter 错误,您可以在swiftlint.yml文件中禁用此规则。

于 2017-10-16T09:13:54.923 回答
4

尝试将此规则添加到您的.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

于 2020-02-05T08:45:12.663 回答