🔥 커스텀 이름 사용하기

272자
3분

기본적으로 @Option@Flag 속성은 속성 이름을 사용해 커맨드 라인 인자 이름을 생성합니다. 하지만 이 이름을 입맛에 맞게 마음대로 변경할 수 있어요. 예를 들어, verbose 플래그 대안으로 -v를 사용할 수 있게 만들 수 있죠. 그러면 사용자는 --verbose 대신 -v를 사용할 수 있습니다. 새로운 인터페이스는 다음과 같아요:

% count -v -i readme.md -o readme.counts
Counting words in 'readme.md' and writing the result into 'readme.counts'.
 
% count --input readme.md --output readme.counts -v
Counting words in 'readme.md' and writing the result into 'readme.counts'.
 
% count -o readme.counts -i readme.md --verbose
Counting words in 'readme.md' and writing the result into 'readme.counts'.
 
shell

@Option@Flag 이니셜라이저에 name 파라미터를 전달해 입력 이름을 커스텀할 수 있어요:

@main
struct Count: ParsableCommand {
    @Option(name: [.short, .customLong("input")])
    var inputFile: String
 
    @Option(name: [.short, .customLong("output")])
    var outputFile: String
 
    @Flag(name: .shortAndLong)
    var verbose = false
 
    mutating func run() throws { ... }
}
 
swift

위 코드를 하나씩 뜯어보면:

  1. inputFile 속성에 name: [.short, .customLong("input")]을 전달했습니다.
    • .short은 속성 이름 첫 글자만 사용해 i로 단축 이름을 만들고,
    • .customLong("input")-input이라는 긴 이름을 커스텀하게 지정합니다.
  2. outputFile 속성도 마찬가지로 .short.customLong("output")을 사용해 o-output 이름을 지정했어요.
  3. verbose 속성은 name: .shortAndLong을 사용했는데, 이는 v-verbose라는 짧은 이름과 긴 이름을 모두 사용하겠다는 뜻이에요.

기본 이름 지정 방식은 .long인데, 이는 속성 이름 앞에 --를 붙여 사용해요. .short은 속성 이름 첫 글자만 사용하고 -를 붙이며, 여러 개 짧은 옵션을 함께 사용할 수 있게 해줍니다. .customShort(_:).customLong(_:) 메서드를 사용하면 짧은 이름과 긴 이름을 직접 지정할 수도 있고, .shortAndLong 속성을 사용하면 짧은 이름과 긴 이름 두 가지를 모두 만들어내는 일반적인 상황을 간단히 처리할 수 있습니다.

이렇게 커스텀 이름을 사용하면 사용자는 커맨드 라인 인자를 더욱 직관적이고 편리하게 사용할 수 있습니다.