嵌套违规。类型应嵌套在最深1级

时间:2017-10-16 09:10:05

标签: ios swift swiftlint

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

    static let placeholder = "login_email"
}

enter image description here

如何解决这个问题?

3 个答案:

答案 0 :(得分:8)

SwiftLintnesting这一特定规则已在以下问答A中进行了讨论:

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

  

...类型可以嵌套到所需的级别。

这一点(基于意见的规则)的一个动机可以在SwiftLint issue 1450中找到:

  

jpsim

     

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

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

...

基于以上所述,除非您发现您的代码变成了难以理解的厄运意大利面金字塔(我不相信您的示例中的情况),您可以简单地考虑禁用the nesting rule

// swiftlint:disable nesting

答案 1 :(得分:4)

您可以创建另一个结构:

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

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

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

答案 2 :(得分:1)

尝试在您的.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