Swift – 기능 본문 길이 위반 또는 행 길이 위반

Nov 15 2020

한 줄에 한 단어 인 매우 긴 배열을 반환하는 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라고 생각합니다.

이 문제를 어떻게 해결합니까? 이 오류를 어떻게 비활성화합니까?

답변

2 Christophe Nov 15 2020 at 18:53

옵션 1 : 레이아웃 또는 디자인 조정

소스 코드에있는 긴 영어 단어 배열로 인해 문제가 발생한 것 같습니다.

한 줄에 한 항목과 모든 항목이있는 한 줄 사이의 간단한 방법은 이 데이터를 여러 줄에 분산하는 것입니다 .

120 줄로 나누어 진 1492 개의 문자는 13 줄을 제공합니다. 평균 영어 단어 길이 4.7을 고려하면 (귀하의 경우 따옴표를 묶은 평균 보안 할 수없는 토큰 길이 6.7은 추가 줄에서 일부 오류를 이동해야 할 수 있습니다. 평균적으로 계산을 수행하면 추가 줄에는 추가로 88 자 (6.7 * 13)가 포함되어야하므로 14 번째 줄입니다. 175 줄 제한을 고려할 때 여백이 여전히 많이 있습니다 ;-)

더 나은 방법은 파일에 데이터를 저장 하고 런타임에 동적으로 배열에 데이터를로드하는 것 입니다. 소스 코드를 과도하게 사용하지 않을뿐만 아니라 새로운 단어로 목록을 유지 관리하고 국제화 할 수 있습니다.

옵션 2 : 린터 구성

상대적으로 작은 줄 길이와 본문 길이 제한은 구문이나 컴파일러 제한에 관한 것이 아닙니다. 더 읽기 쉬운 코드를 작성하도록하기위한 정적 분석 규칙입니다.

규칙을 비활성화 할 수 있습니다 .

  • 프로젝트 수준에서 파일 .swiftlint.yml
  • 주석과 함께 소스 코드에서 // swiftlint:disable <rule1> [<rule2> <rule3>...]

line_length이 SO 질문 에서 실용적인 예를 찾을 수 있습니다.

iRamzy_ Nov 15 2020 at 19:11

배열을 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)
        }
    }