【问题标题】:Swift – Function Body Length Violation or Line Length ViolationSwift – 函数体长度违规或行长度违规
【发布时间】:2021-02-26 18:54:16
【问题描述】:

我在 Xcode (swift) 上有一个函数,它返回一个很长的数组,即每行一个字。喜欢

static func en() -> [String] {
    [
        "a",
        "about",
        "above",
        "after",
        "again",
        "against",
        "all",
        "am",
        ...

当我尝试编译时,我得到:

Function Body Length Violation: Function body should span 40 lines or less excluding comments and whitespace: currently spans 175 lines (function_body_length)

如果我尝试删除换行符并添加空格,我会得到这个

Line Length Violation: Line should be 120 characters or less: currently 1492 characters (line_length)

我认为问题出在 SwiftLint。

我该如何解决这个问题?如何禁用此错误。

【问题讨论】:

  • 你想达到什么目的?
  • 也许在几行上有几个项目? 120 行中的 1492 个字符给出 13 行。如果考虑到 4.7 的平均英语单词长度,导致平均不安全标记长度为 6.7,避免破坏标记可能会平均增加 88 个字符,因此第 14 行。鉴于 175 行的限制,您仍有足够的利润空间。但我不会回答这个问题,因为独立于这个底层代码,看看是否以及如何规避这些限制是很有趣的。
  • 由于它们似乎是来自 SwiftLint 的错误,您可以在文件中为带有注释标记的问题区域禁用 linter,例如 // swiftlint:disable function_body_length 。见github.com/realm/SwiftLint
  • 此外,您还可以在这里找到一些关于自定义规则的附加信息:stackoverflow.com/q/48965916/3723423
  • @WarrenBurton - 我在哪里添加这个?我这里说的是 Xcode。

标签: swift swift5


【解决方案1】:

选项 1:调整布局或设计

您的问题似乎是源代码中的一长串英文单词引起的。

在每行一个项目和包含所有项目的一行之间的一种简单方法是将此数据分布在多行:

1492 个字符分成 120 行,得到 13 行。如果您考虑到 4.7 的平均英语单词长度(在您的情况下,带引号的平均不安全标记长度为 6.7,您可能不得不将一些问题转移到额外的行上。做数学,平均而言,额外的行必须包含额外的 88 个字符(6.7*13)所以第 14 行。鉴于 175 行限制,您仍然有足够的边距;-)

更好的方法是将数据存储在文件中并在运行时将数据动态加载到数组中。不仅不会让你的源代码超重,而且还可以促进用新词维护列表,以及国际化。

选项 2:配置你的 linter

相对较小的行长和正文长度限制与语法或编译器限制无关。这是静态分析规则,旨在挑战您编写更具可读性的代码。

你可以disable the rules:

  • 在项目级别,在文件.swiftlint.yml
  • 在源代码中,带有注释// swiftlint:disable <rule1> [<rule2> <rule3>...]

您可以在此SO question 中找到带有line_length 的实际示例

【讨论】:

    【解决方案2】:

    我猜你可以把你的数组放在一个 json 文件中,然后像这样解码。

    if let url = Bundle.main.url(forResource: "Filename", withExtension: "json") {
            do {
                let data = try Data(contentsOf: url)
                let array = try! JSONDecoder().decode(YourModel.self, from: data)
                // deal with it.
            } catch {
                print("error",error)
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-02
      • 2018-08-04
      • 1970-01-01
      • 2022-01-23
      • 2019-07-21
      • 1970-01-01
      相关资源
      最近更新 更多