首页 > 解决方案 > Swift – 函数体长度违规或行长度违规

问题描述

我在 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。

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

标签: swiftswift5

解决方案


选项 1:调整您的布局或设计

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

每行一个项目和包含所有项目的一行之间的一种简单方法是将这些数据分布在几行上

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

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

选项 2:配置你的 linter

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

您可以禁用规则

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

line_length您可以在这个SO question中找到实际示例


推荐阅读