Swift에서 명령줄 인수에 액세스하는 방법은 무엇입니까?
Swift에서 명령줄 응용 프로그램에 대한 명령줄 인수에 액세스하는 방법은 무엇입니까?
01/17/17 업데이트: Swift 3의 예제 업데이트. Process
로 이름이 변경되었습니다.CommandLine
.
2015년 09월 30일 업데이트: Swift 2에서 작동하도록 예제 업데이트.
Foundation 없이도 실제로 이 작업을 수행할 수 있습니다. C_ARGV
그리고.C_ARGC
.
Swift 표준 라이브러리에는 다음과 같은 구조가 포함되어 있습니다.CommandLine
의 컬렉션을 가지고 있습니다.String
라고 불리는arguments
따라서 다음과 같은 인수를 사용할 수 있습니다.
for argument in CommandLine.arguments {
switch argument {
case "arg1":
print("first argument")
case "arg2":
print("second argument")
default:
print("an argument")
}
}
Swift 3에서는 다음 대신 enum을 사용합니다.Process
그래서:
let arguments = CommandLine.arguments
최상위 수준 상수 사용C_ARGC
그리고.C_ARGV
.
for i in 1..C_ARGC {
let index = Int(i);
let arg = String.fromCString(C_ARGV[index])
switch arg {
case "this":
println("this yo");
case "that":
println("that yo")
default:
println("dunno bro")
}
}
참고로 다음 범위를 사용합니다.1..C_ARGC
왜냐하면 첫 번째 요소는C_ARGV
"array"는 응용 프로그램의 경로입니다.
그C_ARGV
변수는 실제로 배열이 아니지만 배열처럼 하위 스크립팅이 가능합니다.
Apple은 다음 제품을 출시했습니다.ArgumentParser
이를 위한 라이브러리:
발표하게 되어 기쁩니다.
ArgumentParser
간단하면서도 재미있는 새로운 오픈 소스 라이브러리!Swift에서 명령줄 인수를 구문 분석합니다.
신속한 논쟁 파서
https://github.com/apple/swift-argument-parser
명령줄에서 수집해야 하는 정보를 정의하는 유형을 선언하는 것으로 시작합니다.저장된 각 속성을 다음 중 하나로 장식
ArgumentParser
의 재산 포장지, 그리고 준수를 선언합니다.ParsableCommand
.그
ArgumentParser
라이브러리는 명령줄 인수를 구문 분석하고 명령 유형을 인스턴스화한 다음 사용자 정의를 실행합니다.run()
메소드를 사용하거나 유용한 메시지와 함께 종료합니다.
이전의 "getopt"(Swift에서 사용 가능)를 사용하고자 하는 사람은 누구나 이것을 참조로 사용할 수 있습니다.다음 사이트에서 찾을 수 있는 GNU 예제의 Swift 포트를 만들었습니다.
http://www.gnu.org/software/libc/manual/html_node/Example-of-Getopt.html
상세한 설명을 곁들여테스트를 거쳐 완벽하게 작동합니다.Foundation도 필요하지 않습니다.
var aFlag = 0
var bFlag = 0
var cValue = String()
let pattern = "abc:"
var buffer = Array(pattern.utf8).map { Int8($0) }
while true {
let option = Int(getopt(C_ARGC, C_ARGV, buffer))
if option == -1 {
break
}
switch "\(UnicodeScalar(option))"
{
case "a":
aFlag = 1
println("Option -a")
case "b":
bFlag = 1
println("Option -b")
case "c":
cValue = String.fromCString(optarg)!
println("Option -c \(cValue)")
case "?":
let charOption = "\(UnicodeScalar(Int(optopt)))"
if charOption == "c" {
println("Option '\(charOption)' requires an argument.")
} else {
println("Unknown option '\(charOption)'.")
}
exit(1)
default:
abort()
}
}
println("aflag ='\(aFlag)', bflag = '\(bFlag)' cvalue = '\(cValue)'")
for index in optind..<C_ARGC {
println("Non-option argument '\(String.fromCString(C_ARGV[Int(index)])!)'")
}
다음을 사용하여 인수 파서를 만들 수 있습니다.CommandLine.arguments
원하는 논리를 배열하고 추가합니다.
테스트할 수 있습니다.파일 만들기arguments.swift
//Remember the first argument is the name of the executable
print("you passed \(CommandLine.arguments.count - 1) argument(s)")
print("And they are")
for argument in CommandLine.arguments {
print(argument)
}
컴파일 후 실행:
$ swiftc arguments.swift
$ ./arguments argument1 argument2 argument3
고유한 인수 구문 분석기를 구축할 때 발생하는 문제는 모든 명령줄 인수 규칙을 고려하는 것입니다.기존 인수 구문 분석기를 사용하는 것이 좋습니다.
다음을 사용할 수 있습니다.
- 증기 콘솔 모듈
- Swift Package 관리자가 사용하는 TSC 유틸리티 인수 구문 분석기
- Apple이 오픈 소스로 제공하는 Swift Argument 파서
저는 세 가지 모두에서 명령줄 도구를 구축하는 방법에 대해 썼습니다.당신은 그것들을 확인하고 어떤 스타일이 당신에게 가장 잘 어울리는지 결정해야 합니다.
관심이 있는 경우 다음 링크를 참조하십시오.
- Swift and Vapor's Console 모듈을 사용한 CLI 도구 구축
- Swift Package Manager의 TSC 유틸리티 모듈을 사용한 명령줄 인수 구문 분석
- Swift Argument 파서 이해 및 STDIN 관련 작업
언급URL : https://stackoverflow.com/questions/24029633/how-do-you-access-command-line-arguments-in-swift
'source' 카테고리의 다른 글
변수 주석이란 무엇입니까? (0) | 2023.05.01 |
---|---|
RegisterStartupScript와 RegisterClientScriptBlock의 차이점은 무엇입니까? (0) | 2023.05.01 |
해시 표시(#)를 사용하여 Git 커밋 메시지 시작 (0) | 2023.05.01 |
UIButton 제목 텍스트 색상 (0) | 2023.05.01 |
PowerShell을 사용하여 바로 가기를 만드는 방법 (0) | 2023.05.01 |