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라고 생각합니다.
이 문제를 어떻게 해결합니까? 이 오류를 어떻게 비활성화합니까?
답변
옵션 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 질문 에서 실용적인 예를 찾을 수 있습니다.
배열을 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)
}
}