🔥 커맨드 라인 입력 검증하기
284자
3분
커맨드 라인 인수를 파싱한 후에 명령의 프로퍼티를 검증하려면, ParsableCommand
, ParsableArguments
, 또는 AsyncParsableCommand
타입에 대해 validate()
메서드를 구현해야 합니다. validate()
메서드에서 오류를 던지면 프로그램이 표준 오류에 메시지를 출력하고 오류 코드와 함께 종료되어, 잘못된 입력으로 run()
메서드가 호출되는 것을 방지해 줍니다.
다음은 제공한 목록에서 하나 이상의 무작위 요소를 출력하는 명령입니다. validate()
메서드는 사용자가 만들 수 있는 세 가지 다른 오류를 잡아내고 각각에 대해 관련 오류를 던집니다.
struct Select: ParsableCommand { @Option var count: Int = 1 @Argument var elements: [String] = [] mutating func validate() throws { // count가 1 이상인지 검사합니다. guard count >= 1 else { throw ValidationError("'count'를 1 이상으로 지정해 주세요.") } // elements가 비어있지 않은지 검사합니다. guard !elements.isEmpty else { throw ValidationError("하나 이상의 선택할 요소를 제공해 주세요.") } // count가 elements의 개수 이하인지 검사합니다. guard count <= elements.count else { throw ValidationError("'count'를 요소 개수보다 작게 지정해 주세요.") } } mutating func run() { // elements를 섞어서 count만큼 앞에서부터 출력합니다. print(elements.shuffled().prefix(count).joined(separator: "\n")) } }
swift
유용한 오류 메시지를 제공하면, 새로운 사용자가 커맨드 라인 도구를 성공적으로 사용할 수 있도록 안내할 수 있습니다.
% select Error: 하나 이상의 선택할 요소를 제공해 주세요. Usage: select [--count <count>] [<elements> ...] See 'select --help' for more information. % select --count 2 hello Error: 'count'를 요소 개수보다 작게 지정해 주세요. Usage: select [--count <count>] [<elements> ...] See 'select --help' for more information. % select --count 0 hello hey hi howdy Error: 'count'를 1 이상으로 지정해 주세요. Usage: select [--count <count>] [<elements> ...] See 'select --help' for more information. % select --count 2 hello hey hi howdy howdy hey
text
이렇게 validate()
메서드를 구현하여 커맨드 라인 인수의 유효성을 검사할 수 있답니다. 사용자가 잘못된 인수를 입력했을 때 적절한 오류 메시지를 출력하여 올바른 사용법을 안내해 주는 것이 중요하죠.