如何在Swift中访问命令行应用程序的命令行参数?
发布于 2016-08-27 23:52:54
发布于 2014-06-04 13:26:10
使用顶级常量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
“数组”的第一个元素是应用程序的路径。
C_ARGV
变量实际上不是一个数组,但可以像数组一样使用子脚本化。
发布于 2014-11-24 23:59:45
任何想要使用旧的"getopt“(在Swift中可用)的人都可以将其作为参考。我用C编写了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)])!)'")
}
https://stackoverflow.com/questions/24029633
复制相似问题