🔥 플래그 반전, 열거형, 카운트 사용하기
346자
4분
플래그는 보통 Bool
프로퍼티에 많이 사용해요. 플래그 반전을 지정하면 true
/false
쌍으로 된 플래그를 만들 수 있습니다.
struct Example: ParsableCommand { @Flag(inversion: .prefixedNo) var index = true // 기본값을 true로 설정합니다. @Flag(inversion: .prefixedEnableDisable) var requiredElement: Bool // 기본값을 설정하지 않아 사용자가 꼭 지정해야 합니다. mutating func run() throws { print(index, requiredElement) } }
swift
플래그를 반전으로 선언할 때는 프로퍼티 초기값을 true
또는 false
로 설정하여 기본값을 정합니다. 사용자가 두 반전 중 하나를 꼭 고르게 하려면 기본값을 생략하면 돼요.
위 Example
명령에서 requiredElement
프로퍼티는 플래그가 필수로 지정되어 있어요. 지정된 접두사는 플래그의 긴 이름 앞에 붙습니다.
% example --enable-required-element true true % example --no-index --disable-required-element false false % example --index Error: Missing one of: '--enable-required-element', '--disable-required-element'
shell
부울 값에 대해 사용자가 원하는 이름의 플래그를 만들거나, 두 개 이상의 이름 중에서 하나만 고를 수 있게 하거나, 정해진 선택 항목 집합에서 여러 값을 모으려면 EnumerableFlag
프로토콜을 따르는 열거형을 정의하세요.
enum CacheMethod: String, EnumerableFlag { case inMemoryCache case persistentCache } enum Color: String, EnumerableFlag { case pink, purple, silver } struct Example: ParsableCommand { @Flag var cacheMethod: CacheMethod // 캐시 방법을 고르는 플래그예요. @Flag var colors: [Color] = [] // 여러 색상을 고를 수 있는 플래그예요. 기본값은 빈 배열이에요. mutating func run() throws { print(cacheMethod) print(colors) } }
swift
이 경우 플래그 이름은 원시 값에서 가져와요. 이름과 도움말 텍스트를 사용자가 원하는 대로 바꾸는 방법은 EnumerableFlag
문서를 보시면 자세히 나와 있어요.
% example --in-memory-cache --pink --silver .inMemoryCache [.pink, .silver] % example Error: Missing one of: '--in-memory-cache', '--persistent-cache'
shell
마지막으로, 플래그 타입이 Int
면 해당 플래그가 지정된 횟수만큼 값으로 바뀝니다.
struct Example: ParsableCommand { @Flag(name: .shortAndLong) var verbose: Int // 상세 정보 출력 단계를 나타내는 정수 플래그예요. 기본값은 0이에요. mutating func run() throws { print("Verbosity level: \(verbose)") } }
swift
이 예제에서 verbose
는 기본값이 0이고, -v
또는 --verbose
가 주어진 횟수를 세어요.
% example --verbose Verbosity level: 1 % example -vvvv Verbosity level: 4
shell
이렇게 Bool
프로퍼티에 플래그 반전을 사용하거나, EnumerableFlag
프로토콜을 따르는 열거형을 정의해서 사용자가 원하는 플래그 이름과 선택 항목을 제공하거나, Int
타입 플래그로 지정 횟수를 세는 방법으로 명령줄 인터페이스에서 여러 가지 옵션을 자유롭게 처리할 수 있습니다.