你如何访问Swift中的命令行参数?

如何在Swift中访问命令行应用程序的命令行参数?

使用顶级常量C_ARGCC_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 “数组”的第一个元素是应用程序的path。

C_ARGVvariables实际上不是一个数组,而是像数组一样是可以子脚本化的。

更新01/17/17:更新了Swift 3的示例。 Process已被重命名为CommandLine


2015年9月30更新:更新了Swift 2中的示例。


实际上可以在没有Foundation C_ARGVC_ARGC情况下执行此C_ARGC

Swift标准库包含一个struct CommandLine ,它具有一个名为argumentsString集合。 所以你可以打开这样的参数:

 for argument in CommandLine.arguments { switch argument { case "arg1": print("first argument"); case "arg2": print("second argument"); default: print("an argument"); } } 

在Swift 3中,使用CommandLine枚举而不是Process

所以:

 let arguments = CommandLine.arguments 

任何想使用旧的“getopt”(可在Swift中使用)的人都可以使用它作为参考。 我在C中做了一个Swift的GNU例子的端口,可以在这里find:

http://www.gnu.org/software/libc/manual/html_node/Example-of-Getopt.html

有完整的描述。 它经过testing,function齐全。 它也不需要基金会。

 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)])!)'") }