Как вы получаете доступ к аргументам командной строки для приложения командной строки в Swift?
Как получить доступ к аргументам командной строки в Swift?
Ответ 1
Используйте константы верхнего уровня 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 на самом деле не является массивом, но подзаписывается как массив.
Ответ 2
  Обновление 01/17/17: Обновлен пример для Swift 3. Process был переименован в CommandLine.
Обновление 09/30/2015: Обновлен пример работы в 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");
    }
}
		Ответ 3
В Swift 3 используйте CommandLine enum вместо Process
Итак:
let arguments = CommandLine.arguments
		Ответ 4
Любой, кто хочет использовать старый "getopt" (который доступен в Swift), может использовать это как ссылку. Я сделал Swift-порт примера GNU в C, который можно найти по адресу:
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)])!)'")
}